velocious 1.0.241 → 1.0.242
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/src/controller.d.ts.map +1 -1
- package/build/src/controller.js +21 -5
- package/build/src/http-server/client/index.d.ts.map +1 -1
- package/build/src/http-server/client/index.js +13 -2
- package/build/src/http-server/client/params-to-object.d.ts +2 -1
- package/build/src/http-server/client/params-to-object.d.ts.map +1 -1
- package/build/src/http-server/client/params-to-object.js +26 -5
- package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
- package/build/src/http-server/client/request-buffer/index.js +35 -6
- package/build/src/http-server/client/request-parser.d.ts.map +1 -1
- package/build/src/http-server/client/request-parser.js +19 -4
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/controller.js"],"names":[],"mappings":"AAYA;IACE;;;OAGG;IACH,gCAHW,MAAM,GACJ,IAAI,CAShB;IAED;;;;;;;;;OASG;IACH,wFARG;QAAqB,MAAM,EAAnB,MAAM;QACqC,aAAa,EAAxD,OAAO,oBAAoB,EAAE,OAAO;QACvB,UAAU,EAAvB,MAAM;QACO,MAAM,EAAnB,MAAM;QACkD,OAAO,EAA/D,OAAO,iCAAiC,EAAE,OAAO;QACQ,QAAQ,EAAjE,OAAO,kCAAkC,EAAE,OAAO;QACrC,QAAQ,EAArB,MAAM;KAChB,EAmBA;IATC,gBAAqB;IACrB,oBAA6B;IAC7B,qDAAmC;IACnC,eAA8B;IAC9B,aAAqB;IACrB,4DAAuB;IACvB,8DAAyB;IACzB,eAAoB;IACpB,kBAAyB;IAG3B,uCAAuC;IACvC,aADc,MAAM,CACe;IAEnC,4EAA4E;IAC5E,oBADc,OAAO,oBAAoB,EAAE,OAAO,CACD;IAEjD,oDAAoD;IACpD,aADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACE;IAEnC,mFAAmF;IACnF,cADc,OAAO,iCAAiC,EAAE,OAAO,CAC1B;IAErC;;;;;;;;;;;;;OAaG;IACH,gBAbW,MAAM,SACN,OAAO,SAEf;QAAsB,MAAM,GAApB,MAAM;QACM,OAAO,GAAnB,IAAI;QACW,QAAQ,GAAvB,OAAO;QACO,MAAM,GAApB,MAAM;QACQ,IAAI,GAAlB,MAAM;QACS,MAAM,GAArB,OAAO;QAC0B,QAAQ,GAAzC,KAAK,GAAG,QAAQ,GAAG,MAAM;QACV,SAAS,GAAxB,OAAO;KACf,GAAU,MAAM,CAWlB;IAED,sDAAsD;IACtD,cADc,MAAM,EAAE,CAUrB;IAJG,mBAAuD;IAM3D;;;OAGG;IACH,4BAIC;IAED,qCA4BC;IAED,oDAAoD;IACpD,UADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAQhC;IAED,8DAA8D;IAC9D,mBADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/controller.js"],"names":[],"mappings":"AAYA;IACE;;;OAGG;IACH,gCAHW,MAAM,GACJ,IAAI,CAShB;IAED;;;;;;;;;OASG;IACH,wFARG;QAAqB,MAAM,EAAnB,MAAM;QACqC,aAAa,EAAxD,OAAO,oBAAoB,EAAE,OAAO;QACvB,UAAU,EAAvB,MAAM;QACO,MAAM,EAAnB,MAAM;QACkD,OAAO,EAA/D,OAAO,iCAAiC,EAAE,OAAO;QACQ,QAAQ,EAAjE,OAAO,kCAAkC,EAAE,OAAO;QACrC,QAAQ,EAArB,MAAM;KAChB,EAmBA;IATC,gBAAqB;IACrB,oBAA6B;IAC7B,qDAAmC;IACnC,eAA8B;IAC9B,aAAqB;IACrB,4DAAuB;IACvB,8DAAyB;IACzB,eAAoB;IACpB,kBAAyB;IAG3B,uCAAuC;IACvC,aADc,MAAM,CACe;IAEnC,4EAA4E;IAC5E,oBADc,OAAO,oBAAoB,EAAE,OAAO,CACD;IAEjD,oDAAoD;IACpD,aADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACE;IAEnC,mFAAmF;IACnF,cADc,OAAO,iCAAiC,EAAE,OAAO,CAC1B;IAErC;;;;;;;;;;;;;OAaG;IACH,gBAbW,MAAM,SACN,OAAO,SAEf;QAAsB,MAAM,GAApB,MAAM;QACM,OAAO,GAAnB,IAAI;QACW,QAAQ,GAAvB,OAAO;QACO,MAAM,GAApB,MAAM;QACQ,IAAI,GAAlB,MAAM;QACS,MAAM,GAArB,OAAO;QAC0B,QAAQ,GAAzC,KAAK,GAAG,QAAQ,GAAG,MAAM;QACV,SAAS,GAAxB,OAAO;KACf,GAAU,MAAM,CAWlB;IAED,sDAAsD;IACtD,cADc,MAAM,EAAE,CAUrB;IAJG,mBAAuD;IAM3D;;;OAGG;IACH,4BAIC;IAED,qCA4BC;IAED,oDAAoD;IACpD,UADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAQhC;IAED,8DAA8D;IAC9D,mBADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA4BhC;IAED;;;;;OAKG;IACH,uCAJG;QAAsB,IAAI,GAAlB,MAAM;QACiB,MAAM,GAA7B,MAAM,GAAG,MAAM;KACvB,GAAU,OAAO,CAAC,IAAI,CAAC,CAczB;IAED,2CAA2C;IAC3C,oBADY,MAAM,QAMjB;IAED,0DAA0D;IAC1D,cADc,OAAO,CAAC,IAAI,CAAC,CA8B1B;IAED,0CAA0C;IAC1C,cADc,IAAI,CAGjB;IAED;;;;;;;OAOG;IACH,mBANW,MAAM,SAEd;QAAsB,WAAW,GAAzB,MAAM;QACiB,MAAM,GAA7B,MAAM,GAAG,MAAM;KACvB,GAAU,IAAI,CAsBhB;IAED;;;OAGG;IACH,8BAHW,MAAM,GACJ,MAAM,CAiBlB;IAED,+GAA+G;IAC/G,kBADc,OAAO,4BAA4B,EAAE,OAAO,GAAG,SAAS,CAGrE;IAED,mFAAmF;IACnF,WADc,OAAO,iCAAiC,EAAE,OAAO,CAC7B;IAElC,qFAAqF;IACrF,YADc,OAAO,kCAAkC,EAAE,OAAO,CAC5B;CACrC;mBAlTkB,aAAa;mBACb,yBAAyB"}
|
package/build/src/controller.js
CHANGED
|
@@ -136,10 +136,26 @@ export default class VelociousController {
|
|
|
136
136
|
const query = this._request.path().split("?")[1];
|
|
137
137
|
if (!query)
|
|
138
138
|
return {};
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
139
|
+
try {
|
|
140
|
+
/** @type {Record<string, any>} */
|
|
141
|
+
const unparsedParams = querystring.parse(query);
|
|
142
|
+
const paramsToObject = new ParamsToObject(unparsedParams);
|
|
143
|
+
return paramsToObject.toObject();
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
const ensuredError = /** @type {Error & {velociousContext?: Record<string, unknown>}} */ (error);
|
|
147
|
+
ensuredError.velociousContext = {
|
|
148
|
+
...(ensuredError.velociousContext || {}),
|
|
149
|
+
requestParsing: {
|
|
150
|
+
httpMethod: this._request.httpMethod(),
|
|
151
|
+
parameterKeys: Object.keys(querystring.parse(query)),
|
|
152
|
+
path: this._request.path(),
|
|
153
|
+
queryPreview: query.length > 300 ? `${query.slice(0, 300)}...` : query,
|
|
154
|
+
stage: "query-parameters"
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
throw ensuredError;
|
|
158
|
+
}
|
|
143
159
|
}
|
|
144
160
|
/**
|
|
145
161
|
* @param {object} [args] - Options object.
|
|
@@ -255,4 +271,4 @@ export default class VelociousController {
|
|
|
255
271
|
/** @returns {import("./http-server/client/response.js").default} - The response. */
|
|
256
272
|
response() { return this._response; }
|
|
257
273
|
}
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUE7QUFDckIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxNQUFNLE1BQU0seUJBQXlCLENBQUE7QUFDNUMsT0FBTyxjQUFjLE1BQU0sMENBQTBDLENBQUE7QUFDckUsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sYUFBYSxNQUFNLDRCQUE0QixDQUFBO0FBQ3RELE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQTtBQUVyQyxNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFtQjtJQUN0Qzs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVU7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6Qiw2QkFBNkI7WUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUE7UUFDMUIsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLEVBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDO1FBQ2xGLElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQy9DLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBQzdELElBQUks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QUFDLGdCQUFnQixFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtJQUNwRCxDQUFDO0lBRUQsbUZBQW1GO0lBQ25GLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBRWxDLHFGQUFxRjtJQUNyRixRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQztDQUNyQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgZWpzIGZyb20gXCJlanNcIlxuaW1wb3J0IHtpbmNvcnBvcmF0ZX0gZnJvbSBcImluY29ycG9yYXRvclwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBDb29raWUgZnJvbSBcIi4vaHR0cC1zZXJ2ZXIvY29va2llLmpzXCJcbmltcG9ydCBQYXJhbXNUb09iamVjdCBmcm9tIFwiLi9odHRwLXNlcnZlci9jbGllbnQvcGFyYW1zLXRvLW9iamVjdC5qc1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQgcXVlcnlzdHJpbmcgZnJvbSBcInF1ZXJ5c3RyaW5nXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzQ29udHJvbGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSAtIE1ldGhvZCBuYW1lLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzdGF0aWMgYmVmb3JlQWN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICBpZiAoIXRoaXMuX2JlZm9yZUFjdGlvbnMpIHtcbiAgICAgIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gICovXG4gICAgICB0aGlzLl9iZWZvcmVBY3Rpb25zID0gW11cbiAgICB9XG5cbiAgICB0aGlzLl9iZWZvcmVBY3Rpb25zLnB1c2gobWV0aG9kTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5hY3Rpb24gLSBBY3Rpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNvbnRyb2xsZXIgLSBDb250cm9sbGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncy5wYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVxdWVzdCAtIFJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVzcG9uc2UgLSBSZXNwb25zZSBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnZpZXdQYXRoIC0gVmlldyBwYXRoLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2FjdGlvbiwgY29uZmlndXJhdGlvbiwgY29udHJvbGxlciwgcGFyYW1zLCByZXF1ZXN0LCByZXNwb25zZSwgdmlld1BhdGh9KSB7XG4gICAgaWYgKCFhY3Rpb24pIHRocm93IG5ldyBFcnJvcihcIk5vIGFjdGlvbiBnaXZlblwiKVxuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uZmlndXJhdGlvbiBnaXZlblwiKVxuICAgIGlmICghY29udHJvbGxlcikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29udHJvbGxlciBnaXZlblwiKVxuICAgIGlmICghcGFyYW1zKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXJhbXMgZ2l2ZW5cIilcbiAgICBpZiAoIXJlcXVlc3QpIHRocm93IG5ldyBFcnJvcihcIk5vIHJlcXVlc3QgZ2l2ZW5cIilcbiAgICBpZiAoIXJlc3BvbnNlKSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZXNwb25zZSBnaXZlblwiKVxuICAgIGlmICghdmlld1BhdGgpIHRocm93IG5ldyBFcnJvcihcIk5vIHZpZXdQYXRoIGdpdmVuXCIpXG5cbiAgICB0aGlzLl9hY3Rpb24gPSBhY3Rpb25cbiAgICB0aGlzLl9jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG4gICAgdGhpcy5fcmVxdWVzdCA9IHJlcXVlc3RcbiAgICB0aGlzLl9yZXNwb25zZSA9IHJlc3BvbnNlXG4gICAgdGhpcy52aWV3UGFyYW1zID0ge31cbiAgICB0aGlzLl92aWV3UGF0aCA9IHZpZXdQYXRoXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gLSBUaGUgYWN0aW9uLiAgKi9cbiAgZ2V0QWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fYWN0aW9uIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSAtIFRoZSBjb25maWd1cmF0aW9uLiAgKi9cbiAgZ2V0Q29uZmlndXJhdGlvbigpIHsgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb24gfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgYW55Pn0gLSBUaGUgcGFyYW1zLiAgKi9cbiAgZ2V0UGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fcGFyYW1zIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdH0gLSBUaGUgcmVxdWVzdC4gICovXG4gIGdldFJlcXVlc3QoKSB7IHJldHVybiB0aGlzLl9yZXF1ZXN0IH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDb29raWUgbmFtZS5cbiAgICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENvb2tpZSB2YWx1ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZG9tYWluXSAtIERvbWFpbi5cbiAgICogQHBhcmFtIHtEYXRlfSBbYXJncy5leHBpcmVzXSAtIEV4cGlyZXMgZGF0ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5odHRwT25seV0gLSBIdHRwT25seSBmbGFnLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4QWdlXSAtIE1heC1BZ2UgaW4gc2Vjb25kcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnBhdGhdIC0gUGF0aC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5zZWN1cmVdIC0gU2VjdXJlIGZsYWcuXG4gICAqIEBwYXJhbSB7XCJMYXhcIiB8IFwiU3RyaWN0XCIgfCBcIk5vbmVcIn0gW2FyZ3Muc2FtZVNpdGVdIC0gU2FtZVNpdGUgdmFsdWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuZW5jcnlwdGVkXSAtIFdoZXRoZXIgdG8gZW5jcnlwdCB0aGUgY29va2llIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7Q29va2llfSAtIENvb2tpZSBpbnN0YW5jZS5cbiAgICovXG4gIHNldENvb2tpZShuYW1lLCB2YWx1ZSwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge2VuY3J5cHRlZCA9IGZhbHNlLCAuLi5vcHRpb25zfSA9IGFyZ3NcbiAgICBjb25zdCBzZWNyZXQgPSBlbmNyeXB0ZWQgPyB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRDb29raWVTZWNyZXQoKSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGNvb2tpZVZhbHVlID0gZW5jcnlwdGVkID8gQ29va2llLmVuY3J5cHRWYWx1ZSh2YWx1ZSwgc2VjcmV0KSA6IFN0cmluZyh2YWx1ZSA/PyBcIlwiKVxuICAgIGNvbnN0IGNvb2tpZSA9IG5ldyBDb29raWUoe25hbWUsIHZhbHVlOiBjb29raWVWYWx1ZSwgb3B0aW9ucywgZW5jcnlwdGVkfSlcblxuICAgIHRoaXMuX3Jlc3BvbnNlLmFkZEhlYWRlcihcIlNldC1Db29raWVcIiwgY29va2llLnRvSGVhZGVyKCkpXG5cbiAgICByZXR1cm4gY29va2llXG4gIH1cblxuICAvKiogQHJldHVybnMge0Nvb2tpZVtdfSAtIENvb2tpZXMgZnJvbSB0aGUgcmVxdWVzdC4gKi9cbiAgZ2V0Q29va2llcygpIHtcbiAgICBpZiAoIXRoaXMuX2Nvb2tpZXMpIHtcbiAgICAgIGNvbnN0IHNlY3JldCA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldENvb2tpZVNlY3JldCgpXG4gICAgICBjb25zdCBoZWFkZXJWYWx1ZSA9IHRoaXMuX3JlcXVlc3QuaGVhZGVyKFwiY29va2llXCIpXG5cbiAgICAgIHRoaXMuX2Nvb2tpZXMgPSBDb29raWUucGFyc2VIZWFkZXIoaGVhZGVyVmFsdWUsIHNlY3JldClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY29va2llc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHt0eXBlb2YgVmVsb2Npb3VzQ29udHJvbGxlcn0gLSBUaGUgY29udHJvbGxlciBjbGFzcy5cbiAgICovXG4gIF9nZXRDb250cm9sbGVyQ2xhc3MoKSB7XG4gICAgY29uc3QgY29udHJvbGxlckNsYXNzID0gLyoqIEB0eXBlIHt0eXBlb2YgVmVsb2Npb3VzQ29udHJvbGxlcn0gKi8gKHRoaXMuY29uc3RydWN0b3IpXG5cbiAgICByZXR1cm4gY29udHJvbGxlckNsYXNzXG4gIH1cblxuICBhc3luYyBfcnVuQmVmb3JlQ2FsbGJhY2tzKCkge1xuICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKFwiX3J1bkJlZm9yZUNhbGxiYWNrc1wiKVxuXG4gICAgbGV0IGN1cnJlbnRDb250cm9sbGVyQ2xhc3MgPSB0aGlzLl9nZXRDb250cm9sbGVyQ2xhc3MoKVxuXG4gICAgd2hpbGUgKGN1cnJlbnRDb250cm9sbGVyQ2xhc3MpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKGBSdW5uaW5nIGNhbGxiYWNrcyBmb3IgJHtjdXJyZW50Q29udHJvbGxlckNsYXNzLm5hbWV9YClcblxuICAgICAgY29uc3QgYmVmb3JlQWN0aW9ucyA9IGN1cnJlbnRDb250cm9sbGVyQ2xhc3MuX2JlZm9yZUFjdGlvbnNcblxuICAgICAgaWYgKGJlZm9yZUFjdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBiZWZvcmVBY3Rpb25OYW1lIG9mIGJlZm9yZUFjdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBiZWZvcmVBY3Rpb24gPSBjdXJyZW50Q29udHJvbGxlckNsYXNzLnByb3RvdHlwZVtiZWZvcmVBY3Rpb25OYW1lXVxuXG4gICAgICAgICAgaWYgKCFiZWZvcmVBY3Rpb24pIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBiZWZvcmUgYWN0aW9uOiAke2JlZm9yZUFjdGlvbk5hbWV9YClcblxuICAgICAgICAgIGNvbnN0IGJvdW5kQmVmb3JlQWN0aW9uID0gYmVmb3JlQWN0aW9uLmJpbmQodGhpcylcblxuICAgICAgICAgIGF3YWl0IGJvdW5kQmVmb3JlQWN0aW9uKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdXJyZW50Q29udHJvbGxlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnJlbnRDb250cm9sbGVyQ2xhc3MpXG5cbiAgICAgIGlmICghY3VycmVudENvbnRyb2xsZXJDbGFzcz8ubmFtZT8uZW5kc1dpdGgoXCJDb250cm9sbGVyXCIpKSBicmVha1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKFwiQWZ0ZXIgcnVuQmVmb3JlQ2FsbGJhY2tzXCIpXG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueT59IC0gVGhlIHBhcmFtcy4gICovXG4gIHBhcmFtcygpIHtcbiAgICAvLyBNZXJnZSBxdWVyeSBwYXJhbWV0ZXJzIHNvIGNvbnRyb2xsZXJzIGNhbiByZWFkIHRoZW0gdmlhIHBhcmFtcygpXG4gICAgY29uc3QgbWVyZ2VkUGFyYW1zID0gey4uLnRoaXMucXVlcnlQYXJhbWV0ZXJzKCksIC4uLnRoaXMuX3BhcmFtc31cblxuICAgIGlmICghbWVyZ2VkUGFyYW1zLmNvbnRyb2xsZXIpIG1lcmdlZFBhcmFtcy5jb250cm9sbGVyID0gdGhpcy5fY29udHJvbGxlclxuXG4gICAgcmV0dXJuIG1lcmdlZFBhcmFtc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzLiAgKi9cbiAgcXVlcnlQYXJhbWV0ZXJzKCkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fcmVxdWVzdC5wYXRoKCkuc3BsaXQoXCI/XCIpWzFdXG5cbiAgICBpZiAoIXF1ZXJ5KSByZXR1cm4ge31cblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgICBjb25zdCB1bnBhcnNlZFBhcmFtcyA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHF1ZXJ5KVxuICAgIGNvbnN0IHBhcmFtc1RvT2JqZWN0ID0gbmV3IFBhcmFtc1RvT2JqZWN0KHVucGFyc2VkUGFyYW1zKVxuXG4gICAgcmV0dXJuIHBhcmFtc1RvT2JqZWN0LnRvT2JqZWN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJncy5qc29uXSAtIEpzb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSBbYXJncy5zdGF0dXNdIC0gU3RhdHVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcmVuZGVyKHtqc29uLCBzdGF0dXMsIC4uLnJlc3RBcmdzfSA9IHt9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGlmIChqc29uKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJKc29uQXJnKGpzb24pXG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgdGhpcy5fcmVzcG9uc2Uuc2V0U3RhdHVzKHN0YXR1cylcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yZW5kZXJWaWV3KClcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge29iamVjdH0ganNvbiAtIEpTT04gcGF5bG9hZC4gKi9cbiAgcmVuZGVySnNvbkFyZyhqc29uKSB7XG4gICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KGpzb24pXG5cbiAgICB0aGlzLl9yZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04XCIpXG4gICAgdGhpcy5fcmVzcG9uc2Uuc2V0Qm9keShib2R5KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuICAqL1xuICByZW5kZXJWaWV3KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB2aWV3UGF0aCA9IGAke3RoaXMuX3ZpZXdQYXRofS8ke2luZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZSh0aGlzLl9hY3Rpb24pKX0uZWpzYFxuICAgICAgY29uc3QgYWN0dWFsVmlld1BhcmFtcyA9IGluY29ycG9yYXRlKHtjb250cm9sbGVyOiB0aGlzfSwgdGhpcy52aWV3UGFyYW1zKVxuXG4gICAgICBlanMucmVuZGVyRmlsZSh2aWV3UGF0aCwgYWN0dWFsVmlld1BhcmFtcywge30sIChlcnIsIHN0cikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVyci5jb2RlID09PSBcIkVOT0VOVFwiKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBNaXNzaW5nIHZpZXcgZmlsZTogJHt2aWV3UGF0aH1gKVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpID09PSAyMDApIHtcbiAgICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2Uuc2V0U3RhdHVzKFwiaW50ZXJuYWwtc2VydmVyLWVycm9yXCIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcIilcbiAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldEJvZHkoYE1pc3NpbmcgdmlldyBmaWxlOiAke3ZpZXdQYXRofWApXG5cbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCIpXG4gICAgICAgICAgdGhpcy5fcmVzcG9uc2Uuc2V0Qm9keShzdHIpXG5cbiAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuICAqL1xuICByZW5kZXJUZXh0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInJlbmRlclRleHQgc3R1YlwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFN0cmVhbXMgYSBmaWxlIHJlc3BvbnNlIGZyb20gZGlzayB3aXRob3V0IGxvYWRpbmcgdGhlIGZ1bGwgZmlsZSBpbnRvIGNvbnRyb2xsZXIgbWVtb3J5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGggLSBGaWxlIHBhdGguXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmNvbnRlbnRUeXBlXSAtIENvbnRlbnQgdHlwZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFthcmdzLnN0YXR1c10gLSBTdGF0dXMuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNlbmRGaWxlKGZpbGVQYXRoLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCB7Y29udGVudFR5cGUsIHN0YXR1cywgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGlmICh0eXBlb2YgZmlsZVBhdGggIT09IFwic3RyaW5nXCIgfHwgZmlsZVBhdGgubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBmaWxlIHBhdGggdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nLCBnb3Q6ICR7U3RyaW5nKGZpbGVQYXRoKX1gKVxuICAgIH1cblxuICAgIGNvbnN0IGRldGVjdGVkQ29udGVudFR5cGUgPSBjb250ZW50VHlwZSB8fCB0aGlzLnNlbmRGaWxlQ29udGVudFR5cGUoZmlsZVBhdGgpXG5cbiAgICBpZiAoZGV0ZWN0ZWRDb250ZW50VHlwZSkge1xuICAgICAgdGhpcy5fcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIGRldGVjdGVkQ29udGVudFR5cGUpXG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgdGhpcy5fcmVzcG9uc2Uuc2V0U3RhdHVzKHN0YXR1cylcbiAgICB9XG5cbiAgICB0aGlzLl9yZXNwb25zZS5zZXRGaWxlUGF0aChmaWxlUGF0aClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGggLSBGaWxlIHBhdGguXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gQ29udGVudCB0eXBlIHZhbHVlLlxuICAgKi9cbiAgc2VuZEZpbGVDb250ZW50VHlwZShmaWxlUGF0aCkge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCkudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIud2FzbVwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi93YXNtXCJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSBcIi5qc1wiKSByZXR1cm4gXCJ0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9VVRGLThcIlxuICAgIGlmIChleHRlbnNpb24gPT09IFwiLmpzb25cIikgcmV0dXJuIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOFwiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIuY3NzXCIpIHJldHVybiBcInRleHQvY3NzOyBjaGFyc2V0PVVURi04XCJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSBcIi5odG1sXCIpIHJldHVybiBcInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFwiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIudHh0XCIpIHJldHVybiBcInRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcIlxuICAgIGlmIChleHRlbnNpb24gPT09IFwiLnN2Z1wiKSByZXR1cm4gXCJpbWFnZS9zdmcreG1sXCJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSBcIi5wbmdcIikgcmV0dXJuIFwiaW1hZ2UvcG5nXCJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSBcIi5qcGdcIiB8fCBleHRlbnNpb24gPT09IFwiLmpwZWdcIikgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIuZ2lmXCIpIHJldHVybiBcImltYWdlL2dpZlwiXG5cbiAgICByZXR1cm4gXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIlxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSAtIEN1cnJlbnQgYWJpbGl0eSBmb3IgcmVxdWVzdCBzY29wZS4gKi9cbiAgY3VycmVudEFiaWxpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldEN1cnJlbnRBYmlsaXR5KClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSAtIFRoZSByZXF1ZXN0LiAgKi9cbiAgcmVxdWVzdCgpIHsgcmV0dXJuIHRoaXMuX3JlcXVlc3QgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVzcG9uc2UuanNcIikuZGVmYXVsdH0gLSBUaGUgcmVzcG9uc2UuICAqL1xuICByZXNwb25zZSgpIHsgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlIH1cbn1cbiJdfQ==
|
|
274
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUE7QUFDckIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxNQUFNLE1BQU0seUJBQXlCLENBQUE7QUFDNUMsT0FBTyxjQUFjLE1BQU0sMENBQTBDLENBQUE7QUFDckUsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sYUFBYSxNQUFNLDRCQUE0QixDQUFBO0FBQ3RELE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQTtBQUVyQyxNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFtQjtJQUN0Qzs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVU7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6Qiw2QkFBNkI7WUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUE7UUFDMUIsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLEVBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDO1FBQ2xGLElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQy9DLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBQzdELElBQUks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LElBQUksU0FBUyxLQUFLLE9BQU87WUFBRSxPQUFPLGtCQUFrQixDQUFBO1FBQ3BELElBQUksU0FBUyxLQUFLLEtBQUs7WUFBRSxPQUFPLGdDQUFnQyxDQUFBO1FBQ2hFLElBQUksU0FBUyxLQUFLLE9BQU87WUFBRSxPQUFPLGlDQUFpQyxDQUFBO1FBQ25FLElBQUksU0FBUyxLQUFLLE1BQU07WUFBRSxPQUFPLHlCQUF5QixDQUFBO1FBQzFELElBQUksU0FBUyxLQUFLLE9BQU87WUFBRSxPQUFPLDBCQUEwQixDQUFBO1FBQzVELElBQUksU0FBUyxLQUFLLE1BQU07WUFBRSxPQUFPLDJCQUEyQixDQUFBO1FBQzVELElBQUksU0FBUyxLQUFLLE1BQU07WUFBRSxPQUFPLGVBQWUsQ0FBQTtRQUNoRCxJQUFJLFNBQVMsS0FBSyxNQUFNO1lBQUUsT0FBTyxXQUFXLENBQUE7UUFDNUMsSUFBSSxTQUFTLEtBQUssTUFBTSxJQUFJLFNBQVMsS0FBSyxPQUFPO1lBQUUsT0FBTyxZQUFZLENBQUE7UUFDdEUsSUFBSSxTQUFTLEtBQUssTUFBTTtZQUFFLE9BQU8sV0FBVyxDQUFBO1FBRTVDLE9BQU8sMEJBQTBCLENBQUE7SUFDbkMsQ0FBQztJQUVELCtHQUErRztJQUMvRyxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO0lBQ3BELENBQUM7SUFFRCxtRkFBbUY7SUFDbkYsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQSxDQUFDLENBQUM7SUFFbEMscUZBQXFGO0lBQ3JGLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUEsQ0FBQyxDQUFDO0NBQ3JDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBlanMgZnJvbSBcImVqc1wiXG5pbXBvcnQge2luY29ycG9yYXRlfSBmcm9tIFwiaW5jb3Jwb3JhdG9yXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXIuanNcIlxuaW1wb3J0IENvb2tpZSBmcm9tIFwiLi9odHRwLXNlcnZlci9jb29raWUuanNcIlxuaW1wb3J0IFBhcmFtc1RvT2JqZWN0IGZyb20gXCIuL2h0dHAtc2VydmVyL2NsaWVudC9wYXJhbXMtdG8tb2JqZWN0LmpzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tIFwicXVlcnlzdHJpbmdcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNDb250cm9sbGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lIC0gTWV0aG9kIG5hbWUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHN0YXRpYyBiZWZvcmVBY3Rpb24obWV0aG9kTmFtZSkge1xuICAgIGlmICghdGhpcy5fYmVmb3JlQWN0aW9ucykge1xuICAgICAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAgKi9cbiAgICAgIHRoaXMuX2JlZm9yZUFjdGlvbnMgPSBbXVxuICAgIH1cblxuICAgIHRoaXMuX2JlZm9yZUFjdGlvbnMucHVzaChtZXRob2ROYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmFjdGlvbiAtIEFjdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY29udHJvbGxlciAtIENvbnRyb2xsZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzLnBhcmFtcyAtIFBhcmFtZXRlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdH0gYXJncy5yZXF1ZXN0IC0gUmVxdWVzdCBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVzcG9uc2UuanNcIikuZGVmYXVsdH0gYXJncy5yZXNwb25zZSAtIFJlc3BvbnNlIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Mudmlld1BhdGggLSBWaWV3IHBhdGguXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7YWN0aW9uLCBjb25maWd1cmF0aW9uLCBjb250cm9sbGVyLCBwYXJhbXMsIHJlcXVlc3QsIHJlc3BvbnNlLCB2aWV3UGF0aH0pIHtcbiAgICBpZiAoIWFjdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gYWN0aW9uIGdpdmVuXCIpXG4gICAgaWYgKCFjb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIGdpdmVuXCIpXG4gICAgaWYgKCFjb250cm9sbGVyKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb250cm9sbGVyIGdpdmVuXCIpXG4gICAgaWYgKCFwYXJhbXMpIHRocm93IG5ldyBFcnJvcihcIk5vIHBhcmFtcyBnaXZlblwiKVxuICAgIGlmICghcmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVxdWVzdCBnaXZlblwiKVxuICAgIGlmICghcmVzcG9uc2UpIHRocm93IG5ldyBFcnJvcihcIk5vIHJlc3BvbnNlIGdpdmVuXCIpXG4gICAgaWYgKCF2aWV3UGF0aCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmlld1BhdGggZ2l2ZW5cIilcblxuICAgIHRoaXMuX2FjdGlvbiA9IGFjdGlvblxuICAgIHRoaXMuX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyXG4gICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcbiAgICB0aGlzLl9yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMuX3Jlc3BvbnNlID0gcmVzcG9uc2VcbiAgICB0aGlzLnZpZXdQYXJhbXMgPSB7fVxuICAgIHRoaXMuX3ZpZXdQYXRoID0gdmlld1BhdGhcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBhY3Rpb24uICAqL1xuICBnZXRBY3Rpb24oKSB7IHJldHVybiB0aGlzLl9hY3Rpb24gfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IC0gVGhlIGNvbmZpZ3VyYXRpb24uICAqL1xuICBnZXRDb25maWd1cmF0aW9uKCkgeyByZXR1cm4gdGhpcy5fY29uZmlndXJhdGlvbiB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAtIFRoZSBwYXJhbXMuICAqL1xuICBnZXRQYXJhbXMoKSB7IHJldHVybiB0aGlzLl9wYXJhbXMgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSAtIFRoZSByZXF1ZXN0LiAgKi9cbiAgZ2V0UmVxdWVzdCgpIHsgcmV0dXJuIHRoaXMuX3JlcXVlc3QgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENvb2tpZSBuYW1lLlxuICAgKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ29va2llIHZhbHVlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5kb21haW5dIC0gRG9tYWluLlxuICAgKiBAcGFyYW0ge0RhdGV9IFthcmdzLmV4cGlyZXNdIC0gRXhwaXJlcyBkYXRlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmh0dHBPbmx5XSAtIEh0dHBPbmx5IGZsYWcuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhBZ2VdIC0gTWF4LUFnZSBpbiBzZWNvbmRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MucGF0aF0gLSBQYXRoLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLnNlY3VyZV0gLSBTZWN1cmUgZmxhZy5cbiAgICogQHBhcmFtIHtcIkxheFwiIHwgXCJTdHJpY3RcIiB8IFwiTm9uZVwifSBbYXJncy5zYW1lU2l0ZV0gLSBTYW1lU2l0ZSB2YWx1ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5lbmNyeXB0ZWRdIC0gV2hldGhlciB0byBlbmNyeXB0IHRoZSBjb29raWUgdmFsdWUuXG4gICAqIEByZXR1cm5zIHtDb29raWV9IC0gQ29va2llIGluc3RhbmNlLlxuICAgKi9cbiAgc2V0Q29va2llKG5hbWUsIHZhbHVlLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCB7ZW5jcnlwdGVkID0gZmFsc2UsIC4uLm9wdGlvbnN9ID0gYXJnc1xuICAgIGNvbnN0IHNlY3JldCA9IGVuY3J5cHRlZCA/IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldENvb2tpZVNlY3JldCgpIDogdW5kZWZpbmVkXG4gICAgY29uc3QgY29va2llVmFsdWUgPSBlbmNyeXB0ZWQgPyBDb29raWUuZW5jcnlwdFZhbHVlKHZhbHVlLCBzZWNyZXQpIDogU3RyaW5nKHZhbHVlID8/IFwiXCIpXG4gICAgY29uc3QgY29va2llID0gbmV3IENvb2tpZSh7bmFtZSwgdmFsdWU6IGNvb2tpZVZhbHVlLCBvcHRpb25zLCBlbmNyeXB0ZWR9KVxuXG4gICAgdGhpcy5fcmVzcG9uc2UuYWRkSGVhZGVyKFwiU2V0LUNvb2tpZVwiLCBjb29raWUudG9IZWFkZXIoKSlcblxuICAgIHJldHVybiBjb29raWVcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Q29va2llW119IC0gQ29va2llcyBmcm9tIHRoZSByZXF1ZXN0LiAqL1xuICBnZXRDb29raWVzKCkge1xuICAgIGlmICghdGhpcy5fY29va2llcykge1xuICAgICAgY29uc3Qgc2VjcmV0ID0gdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZ2V0Q29va2llU2VjcmV0KClcbiAgICAgIGNvbnN0IGhlYWRlclZhbHVlID0gdGhpcy5fcmVxdWVzdC5oZWFkZXIoXCJjb29raWVcIilcblxuICAgICAgdGhpcy5fY29va2llcyA9IENvb2tpZS5wYXJzZUhlYWRlcihoZWFkZXJWYWx1ZSwgc2VjcmV0KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jb29raWVzXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge3R5cGVvZiBWZWxvY2lvdXNDb250cm9sbGVyfSAtIFRoZSBjb250cm9sbGVyIGNsYXNzLlxuICAgKi9cbiAgX2dldENvbnRyb2xsZXJDbGFzcygpIHtcbiAgICBjb25zdCBjb250cm9sbGVyQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBWZWxvY2lvdXNDb250cm9sbGVyfSAqLyAodGhpcy5jb25zdHJ1Y3RvcilcblxuICAgIHJldHVybiBjb250cm9sbGVyQ2xhc3NcbiAgfVxuXG4gIGFzeW5jIF9ydW5CZWZvcmVDYWxsYmFja3MoKSB7XG4gICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWcoXCJfcnVuQmVmb3JlQ2FsbGJhY2tzXCIpXG5cbiAgICBsZXQgY3VycmVudENvbnRyb2xsZXJDbGFzcyA9IHRoaXMuX2dldENvbnRyb2xsZXJDbGFzcygpXG5cbiAgICB3aGlsZSAoY3VycmVudENvbnRyb2xsZXJDbGFzcykge1xuICAgICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWcoYFJ1bm5pbmcgY2FsbGJhY2tzIGZvciAke2N1cnJlbnRDb250cm9sbGVyQ2xhc3MubmFtZX1gKVxuXG4gICAgICBjb25zdCBiZWZvcmVBY3Rpb25zID0gY3VycmVudENvbnRyb2xsZXJDbGFzcy5fYmVmb3JlQWN0aW9uc1xuXG4gICAgICBpZiAoYmVmb3JlQWN0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGJlZm9yZUFjdGlvbk5hbWUgb2YgYmVmb3JlQWN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGJlZm9yZUFjdGlvbiA9IGN1cnJlbnRDb250cm9sbGVyQ2xhc3MucHJvdG90eXBlW2JlZm9yZUFjdGlvbk5hbWVdXG5cbiAgICAgICAgICBpZiAoIWJlZm9yZUFjdGlvbikgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIGJlZm9yZSBhY3Rpb246ICR7YmVmb3JlQWN0aW9uTmFtZX1gKVxuXG4gICAgICAgICAgY29uc3QgYm91bmRCZWZvcmVBY3Rpb24gPSBiZWZvcmVBY3Rpb24uYmluZCh0aGlzKVxuXG4gICAgICAgICAgYXdhaXQgYm91bmRCZWZvcmVBY3Rpb24oKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRDb250cm9sbGVyQ2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3VycmVudENvbnRyb2xsZXJDbGFzcylcblxuICAgICAgaWYgKCFjdXJyZW50Q29udHJvbGxlckNsYXNzPy5uYW1lPy5lbmRzV2l0aChcIkNvbnRyb2xsZXJcIikpIGJyZWFrXG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWcoXCJBZnRlciBydW5CZWZvcmVDYWxsYmFja3NcIilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgYW55Pn0gLSBUaGUgcGFyYW1zLiAgKi9cbiAgcGFyYW1zKCkge1xuICAgIC8vIE1lcmdlIHF1ZXJ5IHBhcmFtZXRlcnMgc28gY29udHJvbGxlcnMgY2FuIHJlYWQgdGhlbSB2aWEgcGFyYW1zKClcbiAgICBjb25zdCBtZXJnZWRQYXJhbXMgPSB7Li4udGhpcy5xdWVyeVBhcmFtZXRlcnMoKSwgLi4udGhpcy5fcGFyYW1zfVxuXG4gICAgaWYgKCFtZXJnZWRQYXJhbXMuY29udHJvbGxlcikgbWVyZ2VkUGFyYW1zLmNvbnRyb2xsZXIgPSB0aGlzLl9jb250cm9sbGVyXG5cbiAgICByZXR1cm4gbWVyZ2VkUGFyYW1zXG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueT59IC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMuICAqL1xuICBxdWVyeVBhcmFtZXRlcnMoKSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLl9yZXF1ZXN0LnBhdGgoKS5zcGxpdChcIj9cIilbMV1cblxuICAgIGlmICghcXVlcnkpIHJldHVybiB7fVxuXG4gICAgdHJ5IHtcbiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgICAgIGNvbnN0IHVucGFyc2VkUGFyYW1zID0gcXVlcnlzdHJpbmcucGFyc2UocXVlcnkpXG4gICAgICBjb25zdCBwYXJhbXNUb09iamVjdCA9IG5ldyBQYXJhbXNUb09iamVjdCh1bnBhcnNlZFBhcmFtcylcblxuICAgICAgcmV0dXJuIHBhcmFtc1RvT2JqZWN0LnRvT2JqZWN0KClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZW5zdXJlZEVycm9yID0gLyoqIEB0eXBlIHtFcnJvciAmIHt2ZWxvY2lvdXNDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj59fSAqLyAoZXJyb3IpXG5cbiAgICAgIGVuc3VyZWRFcnJvci52ZWxvY2lvdXNDb250ZXh0ID0ge1xuICAgICAgICAuLi4oZW5zdXJlZEVycm9yLnZlbG9jaW91c0NvbnRleHQgfHwge30pLFxuICAgICAgICByZXF1ZXN0UGFyc2luZzoge1xuICAgICAgICAgIGh0dHBNZXRob2Q6IHRoaXMuX3JlcXVlc3QuaHR0cE1ldGhvZCgpLFxuICAgICAgICAgIHBhcmFtZXRlcktleXM6IE9iamVjdC5rZXlzKHF1ZXJ5c3RyaW5nLnBhcnNlKHF1ZXJ5KSksXG4gICAgICAgICAgcGF0aDogdGhpcy5fcmVxdWVzdC5wYXRoKCksXG4gICAgICAgICAgcXVlcnlQcmV2aWV3OiBxdWVyeS5sZW5ndGggPiAzMDAgPyBgJHtxdWVyeS5zbGljZSgwLCAzMDApfS4uLmAgOiBxdWVyeSxcbiAgICAgICAgICBzdGFnZTogXCJxdWVyeS1wYXJhbWV0ZXJzXCJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlbnN1cmVkRXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3MuanNvbl0gLSBKc29uLlxuICAgKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gW2FyZ3Muc3RhdHVzXSAtIFN0YXR1cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHJlbmRlcih7anNvbiwgc3RhdHVzLCAuLi5yZXN0QXJnc30gPSB7fSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAoanNvbikge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVySnNvbkFyZyhqc29uKVxuICAgIH1cblxuICAgIGlmIChzdGF0dXMpIHtcbiAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldFN0YXR1cyhzdGF0dXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucmVuZGVyVmlldygpXG4gIH1cblxuICAvKiogQHBhcmFtIHtvYmplY3R9IGpzb24gLSBKU09OIHBheWxvYWQuICovXG4gIHJlbmRlckpzb25BcmcoanNvbikge1xuICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShqc29uKVxuXG4gICAgdGhpcy5fcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOFwiKVxuICAgIHRoaXMuX3Jlc3BvbnNlLnNldEJvZHkoYm9keSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLiAgKi9cbiAgcmVuZGVyVmlldygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgdmlld1BhdGggPSBgJHt0aGlzLl92aWV3UGF0aH0vJHtpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUodGhpcy5fYWN0aW9uKSl9LmVqc2BcbiAgICAgIGNvbnN0IGFjdHVhbFZpZXdQYXJhbXMgPSBpbmNvcnBvcmF0ZSh7Y29udHJvbGxlcjogdGhpc30sIHRoaXMudmlld1BhcmFtcylcblxuICAgICAgZWpzLnJlbmRlckZpbGUodmlld1BhdGgsIGFjdHVhbFZpZXdQYXJhbXMsIHt9LCAoZXJyLCBzdHIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gXCJFTk9FTlRcIikge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgTWlzc2luZyB2aWV3IGZpbGU6ICR7dmlld1BhdGh9YClcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3Jlc3BvbnNlLmdldFN0YXR1c0NvZGUoKSA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldFN0YXR1cyhcImludGVybmFsLXNlcnZlci1lcnJvclwiKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9yZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XCIpXG4gICAgICAgICAgICB0aGlzLl9yZXNwb25zZS5zZXRCb2R5KGBNaXNzaW5nIHZpZXcgZmlsZTogJHt2aWV3UGF0aH1gKVxuXG4gICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFwiKVxuICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldEJvZHkoc3RyKVxuXG4gICAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLiAgKi9cbiAgcmVuZGVyVGV4dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZW5kZXJUZXh0IHN0dWJcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJlYW1zIGEgZmlsZSByZXNwb25zZSBmcm9tIGRpc2sgd2l0aG91dCBsb2FkaW5nIHRoZSBmdWxsIGZpbGUgaW50byBjb250cm9sbGVyIG1lbW9yeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoIC0gRmlsZSBwYXRoLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5jb250ZW50VHlwZV0gLSBDb250ZW50IHR5cGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSBbYXJncy5zdGF0dXNdIC0gU3RhdHVzLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZW5kRmlsZShmaWxlUGF0aCwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge2NvbnRlbnRUeXBlLCBzdGF0dXMsIC4uLnJlc3RBcmdzfSA9IGFyZ3NcblxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAodHlwZW9mIGZpbGVQYXRoICE9PSBcInN0cmluZ1wiIHx8IGZpbGVQYXRoLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZmlsZSBwYXRoIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZywgZ290OiAke1N0cmluZyhmaWxlUGF0aCl9YClcbiAgICB9XG5cbiAgICBjb25zdCBkZXRlY3RlZENvbnRlbnRUeXBlID0gY29udGVudFR5cGUgfHwgdGhpcy5zZW5kRmlsZUNvbnRlbnRUeXBlKGZpbGVQYXRoKVxuXG4gICAgaWYgKGRldGVjdGVkQ29udGVudFR5cGUpIHtcbiAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBkZXRlY3RlZENvbnRlbnRUeXBlKVxuICAgIH1cblxuICAgIGlmIChzdGF0dXMpIHtcbiAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldFN0YXR1cyhzdGF0dXMpXG4gICAgfVxuXG4gICAgdGhpcy5fcmVzcG9uc2Uuc2V0RmlsZVBhdGgoZmlsZVBhdGgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoIC0gRmlsZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIENvbnRlbnQgdHlwZSB2YWx1ZS5cbiAgICovXG4gIHNlbmRGaWxlQ29udGVudFR5cGUoZmlsZVBhdGgpIHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChleHRlbnNpb24gPT09IFwiLndhc21cIikgcmV0dXJuIFwiYXBwbGljYXRpb24vd2FzbVwiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIuanNcIikgcmV0dXJuIFwidGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PVVURi04XCJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSBcIi5qc29uXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLThcIlxuICAgIGlmIChleHRlbnNpb24gPT09IFwiLmNzc1wiKSByZXR1cm4gXCJ0ZXh0L2NzczsgY2hhcnNldD1VVEYtOFwiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIuaHRtbFwiKSByZXR1cm4gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcIlxuICAgIGlmIChleHRlbnNpb24gPT09IFwiLnR4dFwiKSByZXR1cm4gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XCJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSBcIi5zdmdcIikgcmV0dXJuIFwiaW1hZ2Uvc3ZnK3htbFwiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIucG5nXCIpIHJldHVybiBcImltYWdlL3BuZ1wiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIuanBnXCIgfHwgZXh0ZW5zaW9uID09PSBcIi5qcGVnXCIpIHJldHVybiBcImltYWdlL2pwZWdcIlxuICAgIGlmIChleHRlbnNpb24gPT09IFwiLmdpZlwiKSByZXR1cm4gXCJpbWFnZS9naWZcIlxuXG4gICAgcmV0dXJuIFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCJcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gLSBDdXJyZW50IGFiaWxpdHkgZm9yIHJlcXVlc3Qgc2NvcGUuICovXG4gIGN1cnJlbnRBYmlsaXR5KCkge1xuICAgIHJldHVybiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRDdXJyZW50QWJpbGl0eSgpXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdH0gLSBUaGUgcmVxdWVzdC4gICovXG4gIHJlcXVlc3QoKSB7IHJldHVybiB0aGlzLl9yZXF1ZXN0IH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHR9IC0gVGhlIHJlc3BvbnNlLiAgKi9cbiAgcmVzcG9uc2UoKSB7IHJldHVybiB0aGlzLl9yZXNwb25zZSB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/index.js"],"names":[],"mappings":"AAmCA;IAIE;;;;;OAKG;IACH,2DAJG;QAAqB,WAAW,EAAxB,MAAM;QACyC,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QAC1B,aAAa,GAA3B,MAAM;KAChB,EAWA;IAnBD,mEAA2B;IAC3B,cAAiB;IAWf,eAA8B;IAC9B,oBAA8B;IAC9B,wDAAkC;IAClC,sBAAkC;IAElC,8BAA8B;IAC9B,gBADW,aAAa,EAAE,CACF;IAG1B;;;OAGG;IACH,iCAHW,MAAM,GACJ,IAAI,CAgBhB;IAED;;;OAGG;IACH,iCAHW,MAAM,GACJ,IAAI,CAgBhB;IAED;;;OAGG;IACH,wBAHW,KAAK,GACH,IAAI,CAehB;IAJC,wBAA+B;IAMjC,kCA6BC;IAED;;;OAGG;IACH,cAHW,MAAM,GACJ,IAAI,CAsDhB;IAED;;;OAGG;IACH,6BAHW,OAAO,cAAc,EAAE,OAAO,GAC5B,OAAO,CAOnB;IAED,0CAA0C;IAC1C,uBADc,IAAI,CA4DjB;IAfC,mCAME;IAWJ,wBAMC;IAED,kCA6BC;IAED;;;OAGG;IACH,4BAHW,aAAa,GACX,OAAO,CAAC,IAAI,CAAC,CAyEzB;IAED;;;OAGG;IACH,yBAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAmBzB;IAED;;;OAGG;IACH,+BAHW,OAAO,cAAc,EAAE,OAAO,GAAG,OAAO,wBAAwB,EAAE,OAAO,GACvE,OAAO,CAenB;CACF;mBA3akB,iBAAiB;0BAEV,qBAAqB;oBAD3B,cAAc;6BAEL,wBAAwB"}
|
|
@@ -17,6 +17,17 @@ function summarizeRequestData(data) {
|
|
|
17
17
|
const preview = data.toString("latin1", 0, Math.min(data.length, 160)).replaceAll("\r", "\\r").replaceAll("\n", "\\n");
|
|
18
18
|
return { length: data.length, preview };
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* @param {Error & {velociousContext?: Record<string, unknown>}} error - Error instance.
|
|
22
|
+
* @returns {Record<string, unknown>} - Safe bad-request details for logs.
|
|
23
|
+
*/
|
|
24
|
+
function badRequestDetails(error) {
|
|
25
|
+
return {
|
|
26
|
+
errorClass: error.name,
|
|
27
|
+
message: error.message,
|
|
28
|
+
velociousContext: error.velociousContext
|
|
29
|
+
};
|
|
30
|
+
}
|
|
20
31
|
export default class VeoliciousHttpServerClient {
|
|
21
32
|
events = new EventEmitter();
|
|
22
33
|
state = "initial";
|
|
@@ -77,7 +88,7 @@ export default class VeoliciousHttpServerClient {
|
|
|
77
88
|
* @returns {void} - No return value.
|
|
78
89
|
*/
|
|
79
90
|
handleBadRequest(error) {
|
|
80
|
-
this.logger.warn(() => ["Failed to parse HTTP request", error]);
|
|
91
|
+
this.logger.warn(() => ["Failed to parse HTTP request", badRequestDetails(/** @type {Error & {velociousContext?: Record<string, unknown>}} */ (error))]);
|
|
81
92
|
if (this.currentRequest && "getRequestParser" in this.currentRequest) {
|
|
82
93
|
const httpRequest = /** @type {import("./request.js").default} */ (this.currentRequest);
|
|
83
94
|
httpRequest.getRequestParser().destroy();
|
|
@@ -371,4 +382,4 @@ export default class VeoliciousHttpServerClient {
|
|
|
371
382
|
return false;
|
|
372
383
|
}
|
|
373
384
|
}
|
|
374
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDakMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sU0FBUyxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxZQUFZLE1BQU0sOEJBQThCLENBQUE7QUFDdkQsT0FBTyxXQUFXLE1BQU0sNkJBQTZCLENBQUE7QUFDckQsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFDcEMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFBO0FBQ2xDLE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sZ0JBQWdCLE1BQU0sd0JBQXdCLENBQUE7QUFFckQ7OztHQUdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFFdEgsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFBO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLDBCQUEwQjtJQUM3QyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtJQUMzQixLQUFLLEdBQUcsU0FBUyxDQUFBO0lBRWpCOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFDO1FBQ3JELElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBRTdELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFFbEMsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCx1QkFBdUIsQ0FBQyxPQUFPO1FBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFBO1FBQy9ELE1BQU0sSUFBSSxHQUFHLEdBQUcsT0FBTyxJQUFJLENBQUE7UUFDM0IsTUFBTSxPQUFPLEdBQUc7WUFDZCxRQUFRLFdBQVcsa0JBQWtCO1lBQ3JDLG1CQUFtQjtZQUNuQix5Q0FBeUM7WUFDekMsbUJBQW1CLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ3BELEVBQUU7WUFDRixJQUFJO1NBQ0wsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFZCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILHVCQUF1QixDQUFDLE9BQU87UUFDN0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUE7UUFDL0QsTUFBTSxJQUFJLEdBQUcsR0FBRyxPQUFPLElBQUksQ0FBQTtRQUMzQixNQUFNLE9BQU8sR0FBRztZQUNkLFFBQVEsV0FBVyxrQkFBa0I7WUFDckMsbUJBQW1CO1lBQ25CLHlDQUF5QztZQUN6QyxtQkFBbUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDcEQsRUFBRTtZQUNGLElBQUk7U0FDTCxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUVkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsS0FBSztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFFL0QsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLGtCQUFrQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNyRSxNQUFNLFdBQVcsR0FBRyw2Q0FBNkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUV2RixXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUMxQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUE7UUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUE7UUFFdEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRCxxQkFBcUIsR0FBRyxHQUFHLEVBQUU7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUUxQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQywrQkFBK0IsRUFBRTtnQkFDeEQsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7Z0JBQzVDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRTtnQkFDOUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO2FBQ3hDLENBQUMsQ0FBQyxDQUFBO1FBRUgsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7WUFDMUIsT0FBTTtRQUNSLENBQUM7UUFFRCxnSkFBZ0o7UUFDaEosSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUE7UUFFdEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUM7WUFDdEMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYztTQUM3QixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUV2QyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2pELGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUNyQixDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxPQUFPLENBQUMsSUFBSTtRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFO2dCQUN4QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7YUFDOUIsQ0FBQyxDQUFDLENBQUE7UUFFSCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbEMsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxpQ0FBaUM7WUFDakMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFBO1lBRXBCLE9BQU8sU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxpQ0FBaUMsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFBO29CQUNoSSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7b0JBQ3BGLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO29CQUMvRSxJQUFJLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFBO2dCQUMvQixDQUFDO3FCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO29CQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtnQkFDNUQsQ0FBQztnQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO2dCQUUvRCxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsb0JBQW9CLEVBQUU7d0JBQzdDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzt3QkFDN0IsWUFBWSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO3dCQUN4QyxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDO3dCQUN2QyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLFlBQVk7cUJBQ3RFLENBQUMsQ0FBQyxDQUFBO2dCQUVILElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtvQkFFNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQywrQkFBK0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFBO3dCQUM5SCxNQUFLO29CQUNQLENBQUM7b0JBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUE7b0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsK0NBQStDLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQTtnQkFDaEosQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQTtRQUN2SSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1CQUFtQixDQUFDLE9BQU87UUFDekIsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQTtRQUM5RCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUE7UUFFcEUsT0FBTyxPQUFPLENBQUMsYUFBYSxJQUFJLFdBQVcsSUFBSSxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtJQUN2RixDQUFDO0lBRUQsMENBQTBDO0lBQzFDLG1CQUFtQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFFL0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUV2RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGtDQUFrQyxDQUFDLENBQUE7WUFDaEUsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2pELE1BQU0sQ0FBQyxHQUFHLGVBQWUsc0NBQXNDLEVBQUUsUUFBUSxDQUFDO2FBQzFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNuQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQTtRQUM5RCxNQUFNLGFBQWEsR0FBRztZQUNwQixRQUFRLFdBQVcsMEJBQTBCO1lBQzdDLG9CQUFvQjtZQUNwQixxQkFBcUI7WUFDckIseUJBQXlCLGtCQUFrQixFQUFFO1lBQzdDLEVBQUU7WUFDRixFQUFFO1NBQ0gsQ0FBQTtRQUNELE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFM0MsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtDQUFrQyxFQUFFLEVBQUUsQ0FBQTtRQUN4RixJQUFJLGNBQWMsQ0FBQTtRQUNsQixJQUFJLHFCQUFxQixDQUFBO1FBRXpCLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUMzQixNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQztnQkFDN0MsTUFBTSxFQUFFLElBQUk7Z0JBQ1osYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWM7YUFDN0IsQ0FBQyxDQUFBO1lBRUYsTUFBTSxnQkFBZ0IsR0FBRyx1REFBdUQsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBRWxHLElBQUksZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQzNCLHFCQUFxQixHQUFHLDZGQUE2RixDQUFDLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDekksQ0FBQztpQkFBTSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUMzQixjQUFjLEdBQUcsNkVBQTZFLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUNsSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUFDO1lBQzNDLE1BQU0sRUFBRSxJQUFJO1lBQ1osYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxjQUFjLEVBQUUsY0FBYztZQUM5QixxQkFBcUIsRUFBRSxxQkFBcUI7U0FDN0MsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLENBQUE7WUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQTtZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNwQyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO0lBQ2hELENBQUM7SUFFRCxXQUFXLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2xILEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDM0IsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3BCLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzVDLE1BQU0sT0FBTyxHQUFHLGFBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQTtZQUUzQyxJQUFJLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFBO2dCQUN6QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUE7Z0JBQzVFLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUVqRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGdDQUFnQyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNySSxJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFBO2dCQUN4QyxDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFdBQVcsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtvQkFDdEcsTUFBTSxLQUFLLENBQUE7Z0JBQ2IsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUztvQkFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQTtnQkFDaEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUMsQ0FBQTtnQkFFN0csSUFBSSxxQkFBcUIsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGtDQUFrQyxXQUFXLDBCQUEwQixnQkFBZ0IsRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDLENBQUE7b0JBQ3JKLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQUs7WUFDUCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWE7UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUNoRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDMUMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFDdkIsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFBO1FBQzVFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUN6QyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNqRSxNQUFNLFdBQVcsR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7UUFDdkUsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNwRCxNQUFNLFlBQVksR0FBRyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUE7UUFDN0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLFVBQVUsQ0FBQTtRQUUvQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0REFBNEQsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzVGLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFBO1FBQ2pHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsc0JBQXNCLEVBQUU7Z0JBQy9DLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsV0FBVztnQkFDWCxRQUFRO2dCQUNSLFlBQVk7Z0JBQ1osWUFBWTthQUNiLENBQUMsQ0FBQyxDQUFBO1FBRUgsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzNDLENBQUM7YUFBTSxJQUFJLFdBQVcsSUFBSSxLQUFLLElBQUksZ0JBQWdCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDcEUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDaEQsQ0FBQztRQUVELElBQUksYUFBYSxDQUFBO1FBRWpCLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3JDLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFBO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sYUFBYSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFBO1FBQ3hGLENBQUM7UUFFRCxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ25ELFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQzlDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRXpDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUVoQixPQUFPLElBQUksUUFBUSxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUE7UUFFekcsS0FBSyxNQUFNLFNBQVMsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekMsS0FBSyxNQUFNLFdBQVcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELE9BQU8sSUFBSSxHQUFHLFNBQVMsS0FBSyxXQUFXLE1BQU0sQ0FBQTtZQUMvQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxNQUFNLENBQUE7UUFFakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsOEJBQThCLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQTtRQUV6SCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLDJCQUEyQixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQTtRQUNuSixDQUFDO1FBRUQsSUFBSSxrQkFBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFdBQVcsR0FBRyw2Q0FBNkMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQzNFLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsc0JBQXNCLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUE7UUFDNUYsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQTtRQUVsQixJQUFJLENBQUM7WUFDSCxJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxVQUFVLElBQUksQ0FBQyxDQUFBO2dCQUNmLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFBO2dCQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQTtnQkFDckksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ25DLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQTtRQUMzRyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsb0JBQW9CLElBQUksQ0FBQyxXQUFXLHdDQUF3QyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQ3hILE1BQU0sS0FBSyxDQUFBO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxPQUFPO1FBQzNCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUN6QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFDNUUsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0I7WUFDdkMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDMUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVOLElBQUksV0FBVyxJQUFJLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUM1QyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUVuRCxJQUFJLFdBQVcsSUFBSSxLQUFLLElBQUksZ0JBQWdCLElBQUksWUFBWTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRXpFLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiXG5pbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHtjcmVhdGVSZWFkU3RyZWFtfSBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiLi4vLi4vdXRpbHMvZXZlbnQtZW1pdHRlci5qc1wiXG5pbXBvcnQgZW5zdXJlRXJyb3IgZnJvbSBcIi4uLy4uL3V0aWxzL2Vuc3VyZS1lcnJvci5qc1wiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi9sb2dnZXIuanNcIlxuaW1wb3J0IFJlcXVlc3QgZnJvbSBcIi4vcmVxdWVzdC5qc1wiXG5pbXBvcnQgUmVxdWVzdFJ1bm5lciBmcm9tIFwiLi9yZXF1ZXN0LXJ1bm5lci5qc1wiXG5pbXBvcnQgV2Vic29ja2V0U2Vzc2lvbiBmcm9tIFwiLi93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiXG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgLSBJbmNvbWluZyByZXF1ZXN0IGRhdGEuXG4gKiBAcmV0dXJucyB7e2xlbmd0aDogbnVtYmVyLCBwcmV2aWV3OiBzdHJpbmd9fSAtIFJlcXVlc3QgZGF0YSBzdW1tYXJ5LlxuICovXG5mdW5jdGlvbiBzdW1tYXJpemVSZXF1ZXN0RGF0YShkYXRhKSB7XG4gIGNvbnN0IHByZXZpZXcgPSBkYXRhLnRvU3RyaW5nKFwibGF0aW4xXCIsIDAsIE1hdGgubWluKGRhdGEubGVuZ3RoLCAxNjApKS5yZXBsYWNlQWxsKFwiXFxyXCIsIFwiXFxcXHJcIikucmVwbGFjZUFsbChcIlxcblwiLCBcIlxcXFxuXCIpXG5cbiAgcmV0dXJuIHtsZW5ndGg6IGRhdGEubGVuZ3RoLCBwcmV2aWV3fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZW9saWNpb3VzSHR0cFNlcnZlckNsaWVudCB7XG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBzdGF0ZSA9IFwiaW5pdGlhbFwiXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLmNsaWVudENvdW50IC0gQ2xpZW50IGNvdW50LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnJlbW90ZUFkZHJlc3NdIC0gUmVtb3RlIGFkZHJlc3MuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y2xpZW50Q291bnQsIGNvbmZpZ3VyYXRpb24sIHJlbW90ZUFkZHJlc3N9KSB7XG4gICAgaWYgKCFjb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIGdpdmVuXCIpXG5cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcbiAgICB0aGlzLmNsaWVudENvdW50ID0gY2xpZW50Q291bnRcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5yZW1vdGVBZGRyZXNzID0gcmVtb3RlQWRkcmVzc1xuXG4gICAgLyoqIEB0eXBlIHtSZXF1ZXN0UnVubmVyW119ICovXG4gICAgdGhpcy5yZXF1ZXN0UnVubmVycyA9IFtdXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRleHQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIF9zZW5kQmFkVXBncmFkZVJlc3BvbnNlKG1lc3NhZ2UpIHtcbiAgICBjb25zdCBodHRwVmVyc2lvbiA9IHRoaXMuY3VycmVudFJlcXVlc3Q/Lmh0dHBWZXJzaW9uKCkgfHwgXCIxLjFcIlxuICAgIGNvbnN0IGJvZHkgPSBgJHttZXNzYWdlfVxcbmBcbiAgICBjb25zdCBoZWFkZXJzID0gW1xuICAgICAgYEhUVFAvJHtodHRwVmVyc2lvbn0gNDAwIEJhZCBSZXF1ZXN0YCxcbiAgICAgIFwiQ29ubmVjdGlvbjogQ2xvc2VcIixcbiAgICAgIFwiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XCIsXG4gICAgICBgQ29udGVudC1MZW5ndGg6ICR7QnVmZmVyLmJ5dGVMZW5ndGgoYm9keSwgXCJ1dGY4XCIpfWAsXG4gICAgICBcIlwiLFxuICAgICAgYm9keVxuICAgIF0uam9pbihcIlxcclxcblwiKVxuXG4gICAgdGhpcy5ldmVudHMuZW1pdChcIm91dHB1dFwiLCBoZWFkZXJzKVxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJjbG9zZVwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gUmVzcG9uc2UgbWVzc2FnZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgX3NlbmRCYWRSZXF1ZXN0UmVzcG9uc2UobWVzc2FnZSkge1xuICAgIGNvbnN0IGh0dHBWZXJzaW9uID0gdGhpcy5jdXJyZW50UmVxdWVzdD8uaHR0cFZlcnNpb24oKSB8fCBcIjEuMVwiXG4gICAgY29uc3QgYm9keSA9IGAke21lc3NhZ2V9XFxuYFxuICAgIGNvbnN0IGhlYWRlcnMgPSBbXG4gICAgICBgSFRUUC8ke2h0dHBWZXJzaW9ufSA0MDAgQmFkIFJlcXVlc3RgLFxuICAgICAgXCJDb25uZWN0aW9uOiBDbG9zZVwiLFxuICAgICAgXCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcIixcbiAgICAgIGBDb250ZW50LUxlbmd0aDogJHtCdWZmZXIuYnl0ZUxlbmd0aChib2R5LCBcInV0ZjhcIil9YCxcbiAgICAgIFwiXCIsXG4gICAgICBib2R5XG4gICAgXS5qb2luKFwiXFxyXFxuXCIpXG5cbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwib3V0cHV0XCIsIGhlYWRlcnMpXG4gICAgdGhpcy5ldmVudHMuZW1pdChcImNsb3NlXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBFcnJvciBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgaGFuZGxlQmFkUmVxdWVzdChlcnJvcikge1xuICAgIHRoaXMubG9nZ2VyLndhcm4oKCkgPT4gW1wiRmFpbGVkIHRvIHBhcnNlIEhUVFAgcmVxdWVzdFwiLCBlcnJvcl0pXG5cbiAgICBpZiAodGhpcy5jdXJyZW50UmVxdWVzdCAmJiBcImdldFJlcXVlc3RQYXJzZXJcIiBpbiB0aGlzLmN1cnJlbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9ICovICh0aGlzLmN1cnJlbnRSZXF1ZXN0KVxuXG4gICAgICBodHRwUmVxdWVzdC5nZXRSZXF1ZXN0UGFyc2VyKCkuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVxdWVzdCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuc3RhdGUgPSBcImluaXRpYWxcIlxuXG4gICAgdGhpcy5fc2VuZEJhZFJlcXVlc3RSZXNwb25zZShcIkJhZCBSZXF1ZXN0XCIpXG4gIH1cblxuICBleGVjdXRlQ3VycmVudFJlcXVlc3QgPSAoKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXCJleGVjdXRlQ3VycmVudFJlcXVlc3RcIilcblxuICAgIGlmICghdGhpcy5jdXJyZW50UmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY3VycmVudCByZXF1ZXN0XCIpXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wiZXhlY3V0ZUN1cnJlbnRSZXF1ZXN0IHJlcXVlc3RcIiwge1xuICAgICAgY2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsXG4gICAgICBodHRwTWV0aG9kOiB0aGlzLmN1cnJlbnRSZXF1ZXN0Lmh0dHBNZXRob2QoKSxcbiAgICAgIGh0dHBWZXJzaW9uOiB0aGlzLmN1cnJlbnRSZXF1ZXN0Lmh0dHBWZXJzaW9uKCksXG4gICAgICBwYXRoOiB0aGlzLmN1cnJlbnRSZXF1ZXN0LnBhdGgoKSxcbiAgICAgIHF1ZXVlTGVuZ3RoOiB0aGlzLnJlcXVlc3RSdW5uZXJzLmxlbmd0aFxuICAgIH1dKVxuXG4gICAgaWYgKHRoaXMuX2lzV2Vic29ja2V0VXBncmFkZSh0aGlzLmN1cnJlbnRSZXF1ZXN0KSkge1xuICAgICAgdGhpcy5fdXBncmFkZVRvV2Vic29ja2V0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFdlIGFyZSBkb25lIHBhcnNpbmcgdGhlIGdpdmVuIHJlcXVlc3QgYW5kIGNhbiB0aGVvcmV0aWNhbGx5IHN0YXJ0IHBhcnNpbmcgYSBuZXcgb25lLCBiZWZvcmUgdGhlIGN1cnJlbnQgcmVxdWVzdCBpcyBkb25lIC0gc28gcmVzZXQgdGhlIHN0YXRlLlxuICAgIHRoaXMuc3RhdGUgPSBcImluaXRpYWxcIlxuXG4gICAgY29uc3QgcmVxdWVzdFJ1bm5lciA9IG5ldyBSZXF1ZXN0UnVubmVyKHtcbiAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbixcbiAgICAgIHJlcXVlc3Q6IHRoaXMuY3VycmVudFJlcXVlc3RcbiAgICB9KVxuXG4gICAgdGhpcy5yZXF1ZXN0UnVubmVycy5wdXNoKHJlcXVlc3RSdW5uZXIpXG5cbiAgICByZXF1ZXN0UnVubmVyLmV2ZW50cy5vbihcImRvbmVcIiwgdGhpcy5yZXF1ZXN0RG9uZSlcbiAgICByZXF1ZXN0UnVubmVyLnJ1bigpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG9uV3JpdGUoZGF0YSkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIm9uV3JpdGUgc3RhcnRcIiwge1xuICAgICAgY2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgIC4uLnN1bW1hcml6ZVJlcXVlc3REYXRhKGRhdGEpXG4gICAgfV0pXG5cbiAgICBpZiAodGhpcy53ZWJzb2NrZXRTZXNzaW9uKSB7XG4gICAgICB0aGlzLndlYnNvY2tldFNlc3Npb24ub25EYXRhKGRhdGEpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLyoqIEB0eXBlIHtCdWZmZXIgfCB1bmRlZmluZWR9ICovXG4gICAgICBsZXQgcmVtYWluaW5nID0gZGF0YVxuXG4gICAgICB3aGlsZSAocmVtYWluaW5nICYmIHJlbWFpbmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IFwiaW5pdGlhbFwiKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wib25Xcml0ZSBjcmVhdGluZyByZXF1ZXN0IHBhcnNlclwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIHJlbWFpbmluZ0xlbmd0aDogcmVtYWluaW5nLmxlbmd0aH1dKVxuICAgICAgICAgIHRoaXMuY3VycmVudFJlcXVlc3QgPSBuZXcgUmVxdWVzdCh7Y2xpZW50OiB0aGlzLCBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb259KVxuICAgICAgICAgIHRoaXMuY3VycmVudFJlcXVlc3QucmVxdWVzdFBhcnNlci5ldmVudHMub24oXCJkb25lXCIsIHRoaXMuZXhlY3V0ZUN1cnJlbnRSZXF1ZXN0KVxuICAgICAgICAgIHRoaXMuc3RhdGUgPSBcInJlcXVlc3RTdGFydGVkXCJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlICE9IFwicmVxdWVzdFN0YXJ0ZWRcIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGF0ZSBmb3IgY2xpZW50OiAke3RoaXMuc3RhdGV9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50UmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY3VycmVudCByZXF1ZXN0XCIpXG5cbiAgICAgICAgcmVtYWluaW5nID0gdGhpcy5jdXJyZW50UmVxdWVzdC5mZWVkKHJlbWFpbmluZylcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wib25Xcml0ZSBmZWQgcGFyc2VyXCIsIHtcbiAgICAgICAgICBjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCxcbiAgICAgICAgICBoYXNSZW1haW5pbmc6IEJvb2xlYW4ocmVtYWluaW5nPy5sZW5ndGgpLFxuICAgICAgICAgIHJlbWFpbmluZ0xlbmd0aDogcmVtYWluaW5nPy5sZW5ndGggfHwgMCxcbiAgICAgICAgICBwYXJzZXJDb21wbGV0ZWQ6IHRoaXMuY3VycmVudFJlcXVlc3Q/LmdldFJlcXVlc3RQYXJzZXIoKS5oYXNDb21wbGV0ZWRcbiAgICAgICAgfV0pXG5cbiAgICAgICAgaWYgKHJlbWFpbmluZyAmJiByZW1haW5pbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3RQYXJzZXIgPSB0aGlzLmN1cnJlbnRSZXF1ZXN0LmdldFJlcXVlc3RQYXJzZXIoKVxuXG4gICAgICAgICAgaWYgKCFyZXF1ZXN0UGFyc2VyLmhhc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wib25Xcml0ZSB3YWl0aW5nIGZvciBtb3JlIGRhdGFcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCByZW1haW5pbmdMZW5ndGg6IHJlbWFpbmluZy5sZW5ndGh9XSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFwiaW5pdGlhbFwiXG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wib25Xcml0ZSBwYXJzZXIgY29tcGxldGVkIHdpdGggcmVtYWluaW5nIGJ5dGVzXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgcmVtYWluaW5nTGVuZ3RoOiByZW1haW5pbmcubGVuZ3RofV0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIm9uV3JpdGUgZW5kXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgc3RhdGU6IHRoaXMuc3RhdGUsIHF1ZXVlTGVuZ3RoOiB0aGlzLnJlcXVlc3RSdW5uZXJzLmxlbmd0aH1dKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmhhbmRsZUJhZFJlcXVlc3QoZW5zdXJlRXJyb3IoZXJyb3IpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSByZXF1ZXN0IC0gUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgd2Vic29ja2V0IHVwZ3JhZGUuXG4gICAqL1xuICBfaXNXZWJzb2NrZXRVcGdyYWRlKHJlcXVlc3QpIHtcbiAgICBjb25zdCB1cGdyYWRlSGVhZGVyID0gcmVxdWVzdC5oZWFkZXIoXCJ1cGdyYWRlXCIpPy50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgY29ubmVjdGlvbkhlYWRlciA9IHJlcXVlc3QuaGVhZGVyKFwiY29ubmVjdGlvblwiKT8udG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIEJvb2xlYW4odXBncmFkZUhlYWRlciA9PSBcIndlYnNvY2tldFwiICYmIGNvbm5lY3Rpb25IZWFkZXI/LmluY2x1ZGVzKFwidXBncmFkZVwiKSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuICAqL1xuICBfdXBncmFkZVRvV2Vic29ja2V0KCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50UmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY3VycmVudCByZXF1ZXN0XCIpXG5cbiAgICBjb25zdCBzZWNXZWJzb2NrZXRLZXkgPSB0aGlzLmN1cnJlbnRSZXF1ZXN0LmhlYWRlcihcInNlYy13ZWJzb2NrZXQta2V5XCIpXG5cbiAgICBpZiAoIXNlY1dlYnNvY2tldEtleSkge1xuICAgICAgdGhpcy5fc2VuZEJhZFVwZ3JhZGVSZXNwb25zZShcIk1pc3NpbmcgU2VjLVdlYlNvY2tldC1LZXkgaGVhZGVyXCIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB3ZWJzb2NrZXRBY2NlcHRLZXkgPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTFcIilcbiAgICAgIC51cGRhdGUoYCR7c2VjV2Vic29ja2V0S2V5fTI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMWAsIFwiYmluYXJ5XCIpXG4gICAgICAuZGlnZXN0KFwiYmFzZTY0XCIpXG4gICAgY29uc3QgaHR0cFZlcnNpb24gPSB0aGlzLmN1cnJlbnRSZXF1ZXN0Lmh0dHBWZXJzaW9uKCkgfHwgXCIxLjFcIlxuICAgIGNvbnN0IHJlc3BvbnNlTGluZXMgPSBbXG4gICAgICBgSFRUUC8ke2h0dHBWZXJzaW9ufSAxMDEgU3dpdGNoaW5nIFByb3RvY29sc2AsXG4gICAgICBcIlVwZ3JhZGU6IHdlYnNvY2tldFwiLFxuICAgICAgXCJDb25uZWN0aW9uOiBVcGdyYWRlXCIsXG4gICAgICBgU2VjLVdlYlNvY2tldC1BY2NlcHQ6ICR7d2Vic29ja2V0QWNjZXB0S2V5fWAsXG4gICAgICBcIlwiLFxuICAgICAgXCJcIlxuICAgIF1cbiAgICBjb25zdCByZXNwb25zZSA9IHJlc3BvbnNlTGluZXMuam9pbihcIlxcclxcblwiKVxuXG4gICAgY29uc3QgbWVzc2FnZUhhbmRsZXJSZXNvbHZlciA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRXZWJzb2NrZXRNZXNzYWdlSGFuZGxlclJlc29sdmVyPy4oKVxuICAgIGxldCBtZXNzYWdlSGFuZGxlclxuICAgIGxldCBtZXNzYWdlSGFuZGxlclByb21pc2VcblxuICAgIGlmIChtZXNzYWdlSGFuZGxlclJlc29sdmVyKSB7XG4gICAgICBjb25zdCByZXNvbHZlZEhhbmRsZXIgPSBtZXNzYWdlSGFuZGxlclJlc29sdmVyKHtcbiAgICAgICAgY2xpZW50OiB0aGlzLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHJlcXVlc3Q6IHRoaXMuY3VycmVudFJlcXVlc3RcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJlc29sdmVkVGhlbmFibGUgPSAvKiogQHR5cGUge3t0aGVuPzogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bn19ICovIChyZXNvbHZlZEhhbmRsZXIpXG5cbiAgICAgIGlmIChyZXNvbHZlZFRoZW5hYmxlPy50aGVuKSB7XG4gICAgICAgIG1lc3NhZ2VIYW5kbGVyUHJvbWlzZSA9IC8qKiBAdHlwZSB7UHJvbWlzZTxpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLldlYnNvY2tldE1lc3NhZ2VIYW5kbGVyIHwgdm9pZD59ICovIChyZXNvbHZlZEhhbmRsZXIpXG4gICAgICB9IGVsc2UgaWYgKHJlc29sdmVkSGFuZGxlcikge1xuICAgICAgICBtZXNzYWdlSGFuZGxlciA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5XZWJzb2NrZXRNZXNzYWdlSGFuZGxlcn0gKi8gKHJlc29sdmVkSGFuZGxlcilcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLndlYnNvY2tldFNlc3Npb24gPSBuZXcgV2Vic29ja2V0U2Vzc2lvbih7XG4gICAgICBjbGllbnQ6IHRoaXMsXG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICB1cGdyYWRlUmVxdWVzdDogdGhpcy5jdXJyZW50UmVxdWVzdCxcbiAgICAgIG1lc3NhZ2VIYW5kbGVyOiBtZXNzYWdlSGFuZGxlcixcbiAgICAgIG1lc3NhZ2VIYW5kbGVyUHJvbWlzZTogbWVzc2FnZUhhbmRsZXJQcm9taXNlXG4gICAgfSlcbiAgICB0aGlzLndlYnNvY2tldFNlc3Npb24uZXZlbnRzLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgdGhpcy53ZWJzb2NrZXRTZXNzaW9uPy5kZXN0cm95KClcbiAgICAgIHRoaXMud2Vic29ja2V0U2Vzc2lvbiA9IHVuZGVmaW5lZFxuICAgICAgdGhpcy5ldmVudHMuZW1pdChcImNsb3NlXCIpXG4gICAgfSlcbiAgICB0aGlzLnN0YXRlID0gXCJ3ZWJzb2NrZXRcIlxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvdXRwdXRcIiwgcmVzcG9uc2UpXG4gICAgdm9pZCB0aGlzLndlYnNvY2tldFNlc3Npb24uaW5pdGlhbGl6ZUNoYW5uZWwoKVxuICB9XG5cbiAgcmVxdWVzdERvbmUgPSAoKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wicmVxdWVzdERvbmVcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCBxdWV1ZUxlbmd0aDogdGhpcy5yZXF1ZXN0UnVubmVycy5sZW5ndGh9XSlcbiAgICB2b2lkIHRoaXMuc2VuZERvbmVSZXF1ZXN0cygpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihcIkZhaWxlZCB3aGlsZSBzZW5kaW5nIGRvbmUgcmVxdWVzdHNcIiwgZXJyb3IpXG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KFwiY2xvc2VcIilcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgc2VuZERvbmVSZXF1ZXN0cygpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcmVxdWVzdFJ1bm5lciA9IHRoaXMucmVxdWVzdFJ1bm5lcnNbMF1cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0UnVubmVyPy5nZXRSZXF1ZXN0KClcblxuICAgICAgaWYgKHJlcXVlc3RSdW5uZXI/LmdldFN0YXRlKCkgPT0gXCJkb25lXCIpIHtcbiAgICAgICAgY29uc3QgaHR0cFZlcnNpb24gPSByZXF1ZXN0Lmh0dHBWZXJzaW9uKClcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbkhlYWRlciA9IHJlcXVlc3QuaGVhZGVyKFwiY29ubmVjdGlvblwiKT8udG9Mb3dlckNhc2UoKT8udHJpbSgpXG4gICAgICAgIGNvbnN0IHNob3VsZENsb3NlQ29ubmVjdGlvbiA9IHRoaXMuc2hvdWxkQ2xvc2VDb25uZWN0aW9uKHJlcXVlc3QpXG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0UnVubmVycy5zaGlmdCgpXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcInNlbmREb25lUmVxdWVzdHMgc2hpZnRlZCBxdWV1ZVwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIHF1ZXVlTGVuZ3RoOiB0aGlzLnJlcXVlc3RSdW5uZXJzLmxlbmd0aH1dKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2VuZFJlc3BvbnNlKHJlcXVlc3RSdW5uZXIpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoKCkgPT4gW2BWZWxvY2lvdXMgY2xpZW50ICR7dGhpcy5jbGllbnRDb3VudH0gZmFpbGVkIHdoaWxlIHNlbmRpbmcgcmVzcG9uc2VgLCBlcnJvcl0pXG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UmVxdWVzdCA9PT0gcmVxdWVzdCAmJiB0aGlzLnN0YXRlID09PSBcImluaXRpYWxcIikgdGhpcy5jdXJyZW50UmVxdWVzdCA9IHVuZGVmaW5lZFxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzZW5kRG9uZVJlcXVlc3RzXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgY29ubmVjdGlvbkhlYWRlciwgaHR0cFZlcnNpb259XSlcblxuICAgICAgICBpZiAoc2hvdWxkQ2xvc2VDb25uZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW2BDbG9zaW5nIHRoZSBjb25uZWN0aW9uIGJlY2F1c2UgJHtodHRwVmVyc2lvbn0gYW5kIGNvbm5lY3Rpb24gaGVhZGVyICR7Y29ubmVjdGlvbkhlYWRlcn1gLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnR9XSlcbiAgICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KFwiY2xvc2VcIilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZXF1ZXN0UnVubmVyfSByZXF1ZXN0UnVubmVyIC0gUmVxdWVzdCBydW5uZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBzZW5kUmVzcG9uc2UocmVxdWVzdFJ1bm5lcikge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gZGlnZyhyZXF1ZXN0UnVubmVyLCBcInJlc3BvbnNlXCIpXG4gICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RSdW5uZXIuZ2V0UmVxdWVzdCgpXG4gICAgY29uc3QgZmlsZVBhdGggPSByZXNwb25zZS5nZXRGaWxlUGF0aCgpXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKClcbiAgICBjb25zdCBjb25uZWN0aW9uSGVhZGVyID0gcmVxdWVzdC5oZWFkZXIoXCJjb25uZWN0aW9uXCIpPy50b0xvd2VyQ2FzZSgpPy50cmltKClcbiAgICBjb25zdCBodHRwVmVyc2lvbiA9IHJlcXVlc3QuaHR0cFZlcnNpb24oKVxuICAgIGNvbnN0IHNob3VsZENsb3NlQ29ubmVjdGlvbiA9IHRoaXMuc2hvdWxkQ2xvc2VDb25uZWN0aW9uKHJlcXVlc3QpXG4gICAgY29uc3QgaGFzRmlsZVBhdGggPSB0eXBlb2YgZmlsZVBhdGggPT09IFwic3RyaW5nXCIgJiYgZmlsZVBhdGgubGVuZ3RoID4gMFxuICAgIGNvbnN0IGJvZHkgPSBoYXNGaWxlUGF0aCA/IG51bGwgOiByZXNwb25zZS5nZXRCb2R5KClcbiAgICBjb25zdCBib2R5SXNTdHJpbmcgPSB0eXBlb2YgYm9keSA9PT0gXCJzdHJpbmdcIlxuICAgIGNvbnN0IGJvZHlJc0JpbmFyeSA9IGJvZHkgaW5zdGFuY2VvZiBVaW50OEFycmF5XG5cbiAgICBpZiAoIWhhc0ZpbGVQYXRoICYmICFib2R5SXNTdHJpbmcgJiYgIWJvZHlJc0JpbmFyeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCByZXNwb25zZSBib2R5IHRvIGJlIGEgc3RyaW5nIG9yIFVpbnQ4QXJyYXksIGdvdCAke3R5cGVvZiBib2R5fWApXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXCJzZW5kUmVzcG9uc2VcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCBjb25uZWN0aW9uSGVhZGVyLCBodHRwVmVyc2lvbn0pXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic2VuZFJlc3BvbnNlIHBheWxvYWRcIiwge1xuICAgICAgY2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsXG4gICAgICBoYXNGaWxlUGF0aCxcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgYm9keUlzQmluYXJ5LFxuICAgICAgYm9keUlzU3RyaW5nXG4gICAgfV0pXG5cbiAgICBpZiAoc2hvdWxkQ2xvc2VDb25uZWN0aW9uKSB7XG4gICAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJDb25uZWN0aW9uXCIsIFwiQ2xvc2VcIilcbiAgICB9IGVsc2UgaWYgKGh0dHBWZXJzaW9uID09IFwiMS4wXCIgJiYgY29ubmVjdGlvbkhlYWRlciA9PSBcImtlZXAtYWxpdmVcIikge1xuICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQ29ubmVjdGlvblwiLCBcIktlZXAtQWxpdmVcIilcbiAgICB9XG5cbiAgICBsZXQgY29udGVudExlbmd0aFxuXG4gICAgaWYgKGhhc0ZpbGVQYXRoKSB7XG4gICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpXG4gICAgICBjb250ZW50TGVuZ3RoID0gc3RhdHMuc2l6ZVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50TGVuZ3RoID0gYm9keUlzU3RyaW5nID8gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGJvZHkpLmxlbmd0aCA6IGJvZHkuYnl0ZUxlbmd0aFxuICAgIH1cblxuICAgIHJlc3BvbnNlLnNldEhlYWRlcihcIkNvbnRlbnQtTGVuZ3RoXCIsIGNvbnRlbnRMZW5ndGgpXG4gICAgcmVzcG9uc2Uuc2V0SGVhZGVyKFwiRGF0ZVwiLCBkYXRlLnRvVVRDU3RyaW5nKCkpXG4gICAgcmVzcG9uc2Uuc2V0SGVhZGVyKFwiU2VydmVyXCIsIFwiVmVsb2Npb3VzXCIpXG5cbiAgICBsZXQgaGVhZGVycyA9IFwiXCJcblxuICAgIGhlYWRlcnMgKz0gYEhUVFAvJHtyZXF1ZXN0Lmh0dHBWZXJzaW9uKCl9ICR7cmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpfSAke3Jlc3BvbnNlLmdldFN0YXR1c01lc3NhZ2UoKX1cXHJcXG5gXG5cbiAgICBmb3IgKGNvbnN0IGhlYWRlcktleSBpbiByZXNwb25zZS5oZWFkZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IGhlYWRlclZhbHVlIG9mIHJlc3BvbnNlLmhlYWRlcnNbaGVhZGVyS2V5XSkge1xuICAgICAgICBoZWFkZXJzICs9IGAke2hlYWRlcktleX06ICR7aGVhZGVyVmFsdWV9XFxyXFxuYFxuICAgICAgfVxuICAgIH1cblxuICAgIGhlYWRlcnMgKz0gXCJcXHJcXG5cIlxuXG4gICAgdGhpcy5ldmVudHMuZW1pdChcIm91dHB1dFwiLCBoZWFkZXJzKVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcInNlbmRSZXNwb25zZSBoZWFkZXJzIGVtaXR0ZWRcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCBoZWFkZXJzTGVuZ3RoOiBoZWFkZXJzLmxlbmd0aH1dKVxuXG4gICAgaWYgKGhhc0ZpbGVQYXRoKSB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmRGaWxlT3V0cHV0KGZpbGVQYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KFwib3V0cHV0XCIsIGJvZHkpXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzZW5kUmVzcG9uc2UgYm9keSBlbWl0dGVkXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgYm9keUxlbmd0aDogYm9keUlzU3RyaW5nID8gYm9keS5sZW5ndGggOiBib2R5LmJ5dGVMZW5ndGh9XSlcbiAgICB9XG5cbiAgICBpZiAoXCJnZXRSZXF1ZXN0UGFyc2VyXCIgaW4gcmVxdWVzdCkge1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3QgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSAqLyAocmVxdWVzdClcbiAgICAgIGh0dHBSZXF1ZXN0LmdldFJlcXVlc3RQYXJzZXIoKS5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoIC0gRmlsZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgc2VuZEZpbGVPdXRwdXQoZmlsZVBhdGgpIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzZW5kRmlsZU91dHB1dCBzdGFydFwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIGZpbGVQYXRofV0pXG4gICAgbGV0IHRvdGFsQnl0ZXMgPSAwXG4gICAgbGV0IGNodW5rQ291bnQgPSAwXG5cbiAgICB0cnkge1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBjcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKSkge1xuICAgICAgICBjaHVua0NvdW50ICs9IDFcbiAgICAgICAgdG90YWxCeXRlcyArPSBjaHVuay5sZW5ndGhcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic2VuZEZpbGVPdXRwdXQgY2h1bmtcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCBjaHVua0NvdW50LCBjaHVua0xlbmd0aDogY2h1bmsubGVuZ3RoLCB0b3RhbEJ5dGVzfV0pXG4gICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvdXRwdXRcIiwgY2h1bmspXG4gICAgICB9XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzZW5kRmlsZU91dHB1dCBkb25lXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgY2h1bmtDb3VudCwgdG90YWxCeXRlc31dKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbYFZlbG9jaW91cyBjbGllbnQgJHt0aGlzLmNsaWVudENvdW50fSBmYWlsZWQgd2hpbGUgc3RyZWFtaW5nIGZpbGUgb3V0cHV0OiAke2ZpbGVQYXRofWAsIGVycm9yXSlcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IHJlcXVlc3QgLSBSZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGUgY29ubmVjdGlvbiBzaG91bGQgYmUgY2xvc2VkLlxuICAgKi9cbiAgc2hvdWxkQ2xvc2VDb25uZWN0aW9uKHJlcXVlc3QpIHtcbiAgICBjb25zdCBodHRwVmVyc2lvbiA9IHJlcXVlc3QuaHR0cFZlcnNpb24oKVxuICAgIGNvbnN0IGNvbm5lY3Rpb25IZWFkZXIgPSByZXF1ZXN0LmhlYWRlcihcImNvbm5lY3Rpb25cIik/LnRvTG93ZXJDYXNlKCk/LnRyaW0oKVxuICAgIGNvbnN0IGNvbm5lY3Rpb25Ub2tlbnMgPSBjb25uZWN0aW9uSGVhZGVyXG4gICAgICA/IGNvbm5lY3Rpb25IZWFkZXIuc3BsaXQoXCIsXCIpLm1hcCgodG9rZW4pID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pXG4gICAgICA6IFtdXG5cbiAgICBpZiAoaHR0cFZlcnNpb24gPT0gXCJ3ZWJzb2NrZXRcIikgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGNvbm5lY3Rpb25Ub2tlbnMuaW5jbHVkZXMoXCJjbG9zZVwiKSkgcmV0dXJuIHRydWVcblxuICAgIGlmIChodHRwVmVyc2lvbiA9PSBcIjEuMFwiICYmIGNvbm5lY3Rpb25IZWFkZXIgIT0gXCJrZWVwLWFsaXZlXCIpIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIl19
|
|
385
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDakMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sU0FBUyxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxZQUFZLE1BQU0sOEJBQThCLENBQUE7QUFDdkQsT0FBTyxXQUFXLE1BQU0sNkJBQTZCLENBQUE7QUFDckQsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFDcEMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFBO0FBQ2xDLE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sZ0JBQWdCLE1BQU0sd0JBQXdCLENBQUE7QUFFckQ7OztHQUdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFFdEgsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQUs7SUFDOUIsT0FBTztRQUNMLFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSTtRQUN0QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFD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QUFxQixDQUFDLE9BQU87UUFDM0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUM1RSxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQjtZQUN2QyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUMxRSxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRU4sSUFBSSxXQUFXLElBQUksV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBQzVDLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRW5ELElBQUksV0FBVyxJQUFJLEtBQUssSUFBSSxnQkFBZ0IsSUFBSSxZQUFZO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFekUsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiXG5pbXBvcnQge2NyZWF0ZVJlYWRTdHJlYW19IGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCIuLi8uLi91dGlscy9ldmVudC1lbWl0dGVyLmpzXCJcbmltcG9ydCBlbnN1cmVFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvZW5zdXJlLWVycm9yLmpzXCJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgUmVxdWVzdCBmcm9tIFwiLi9yZXF1ZXN0LmpzXCJcbmltcG9ydCBSZXF1ZXN0UnVubmVyIGZyb20gXCIuL3JlcXVlc3QtcnVubmVyLmpzXCJcbmltcG9ydCBXZWJzb2NrZXRTZXNzaW9uIGZyb20gXCIuL3dlYnNvY2tldC1zZXNzaW9uLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSAtIEluY29taW5nIHJlcXVlc3QgZGF0YS5cbiAqIEByZXR1cm5zIHt7bGVuZ3RoOiBudW1iZXIsIHByZXZpZXc6IHN0cmluZ319IC0gUmVxdWVzdCBkYXRhIHN1bW1hcnkuXG4gKi9cbmZ1bmN0aW9uIHN1bW1hcml6ZVJlcXVlc3REYXRhKGRhdGEpIHtcbiAgY29uc3QgcHJldmlldyA9IGRhdGEudG9TdHJpbmcoXCJsYXRpbjFcIiwgMCwgTWF0aC5taW4oZGF0YS5sZW5ndGgsIDE2MCkpLnJlcGxhY2VBbGwoXCJcXHJcIiwgXCJcXFxcclwiKS5yZXBsYWNlQWxsKFwiXFxuXCIsIFwiXFxcXG5cIilcblxuICByZXR1cm4ge2xlbmd0aDogZGF0YS5sZW5ndGgsIHByZXZpZXd9XG59XG5cbi8qKlxuICogQHBhcmFtIHtFcnJvciAmIHt2ZWxvY2lvdXNDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj59fSBlcnJvciAtIEVycm9yIGluc3RhbmNlLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAtIFNhZmUgYmFkLXJlcXVlc3QgZGV0YWlscyBmb3IgbG9ncy5cbiAqL1xuZnVuY3Rpb24gYmFkUmVxdWVzdERldGFpbHMoZXJyb3IpIHtcbiAgcmV0dXJuIHtcbiAgICBlcnJvckNsYXNzOiBlcnJvci5uYW1lLFxuICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgdmVsb2Npb3VzQ29udGV4dDogZXJyb3IudmVsb2Npb3VzQ29udGV4dFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlb2xpY2lvdXNIdHRwU2VydmVyQ2xpZW50IHtcbiAgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIHN0YXRlID0gXCJpbml0aWFsXCJcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuY2xpZW50Q291bnQgLSBDbGllbnQgY291bnQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MucmVtb3RlQWRkcmVzc10gLSBSZW1vdGUgYWRkcmVzcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjbGllbnRDb3VudCwgY29uZmlndXJhdGlvbiwgcmVtb3RlQWRkcmVzc30pIHtcbiAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbmZpZ3VyYXRpb24gZ2l2ZW5cIilcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMuY2xpZW50Q291bnQgPSBjbGllbnRDb3VudFxuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLnJlbW90ZUFkZHJlc3MgPSByZW1vdGVBZGRyZXNzXG5cbiAgICAvKiogQHR5cGUge1JlcXVlc3RSdW5uZXJbXX0gKi9cbiAgICB0aGlzLnJlcXVlc3RSdW5uZXJzID0gW11cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIE1lc3NhZ2UgdGV4dC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgX3NlbmRCYWRVcGdyYWRlUmVzcG9uc2UobWVzc2FnZSkge1xuICAgIGNvbnN0IGh0dHBWZXJzaW9uID0gdGhpcy5jdXJyZW50UmVxdWVzdD8uaHR0cFZlcnNpb24oKSB8fCBcIjEuMVwiXG4gICAgY29uc3QgYm9keSA9IGAke21lc3NhZ2V9XFxuYFxuICAgIGNvbnN0IGhlYWRlcnMgPSBbXG4gICAgICBgSFRUUC8ke2h0dHBWZXJzaW9ufSA0MDAgQmFkIFJlcXVlc3RgLFxuICAgICAgXCJDb25uZWN0aW9uOiBDbG9zZVwiLFxuICAgICAgXCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcIixcbiAgICAgIGBDb250ZW50LUxlbmd0aDogJHtCdWZmZXIuYnl0ZUxlbmd0aChib2R5LCBcInV0ZjhcIil9YCxcbiAgICAgIFwiXCIsXG4gICAgICBib2R5XG4gICAgXS5qb2luKFwiXFxyXFxuXCIpXG5cbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwib3V0cHV0XCIsIGhlYWRlcnMpXG4gICAgdGhpcy5ldmVudHMuZW1pdChcImNsb3NlXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBSZXNwb25zZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBfc2VuZEJhZFJlcXVlc3RSZXNwb25zZShtZXNzYWdlKSB7XG4gICAgY29uc3QgaHR0cFZlcnNpb24gPSB0aGlzLmN1cnJlbnRSZXF1ZXN0Py5odHRwVmVyc2lvbigpIHx8IFwiMS4xXCJcbiAgICBjb25zdCBib2R5ID0gYCR7bWVzc2FnZX1cXG5gXG4gICAgY29uc3QgaGVhZGVycyA9IFtcbiAgICAgIGBIVFRQLyR7aHR0cFZlcnNpb259IDQwMCBCYWQgUmVxdWVzdGAsXG4gICAgICBcIkNvbm5lY3Rpb246IENsb3NlXCIsXG4gICAgICBcIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFwiLFxuICAgICAgYENvbnRlbnQtTGVuZ3RoOiAke0J1ZmZlci5ieXRlTGVuZ3RoKGJvZHksIFwidXRmOFwiKX1gLFxuICAgICAgXCJcIixcbiAgICAgIGJvZHlcbiAgICBdLmpvaW4oXCJcXHJcXG5cIilcblxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvdXRwdXRcIiwgaGVhZGVycylcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwiY2xvc2VcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciAtIEVycm9yIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBoYW5kbGVCYWRSZXF1ZXN0KGVycm9yKSB7XG4gICAgdGhpcy5sb2dnZXIud2FybigoKSA9PiBbXCJGYWlsZWQgdG8gcGFyc2UgSFRUUCByZXF1ZXN0XCIsIGJhZFJlcXVlc3REZXRhaWxzKC8qKiBAdHlwZSB7RXJyb3IgJiB7dmVsb2Npb3VzQ29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+fX0gKi8gKGVycm9yKSldKVxuXG4gICAgaWYgKHRoaXMuY3VycmVudFJlcXVlc3QgJiYgXCJnZXRSZXF1ZXN0UGFyc2VyXCIgaW4gdGhpcy5jdXJyZW50UmVxdWVzdCkge1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3QgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSAqLyAodGhpcy5jdXJyZW50UmVxdWVzdClcblxuICAgICAgaHR0cFJlcXVlc3QuZ2V0UmVxdWVzdFBhcnNlcigpLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlcXVlc3QgPSB1bmRlZmluZWRcbiAgICB0aGlzLnN0YXRlID0gXCJpbml0aWFsXCJcblxuICAgIHRoaXMuX3NlbmRCYWRSZXF1ZXN0UmVzcG9uc2UoXCJCYWQgUmVxdWVzdFwiKVxuICB9XG5cbiAgZXhlY3V0ZUN1cnJlbnRSZXF1ZXN0ID0gKCkgPT4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiZXhlY3V0ZUN1cnJlbnRSZXF1ZXN0XCIpXG5cbiAgICBpZiAoIXRoaXMuY3VycmVudFJlcXVlc3QpIHRocm93IG5ldyBFcnJvcihcIk5vIGN1cnJlbnQgcmVxdWVzdFwiKVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcImV4ZWN1dGVDdXJyZW50UmVxdWVzdCByZXF1ZXN0XCIsIHtcbiAgICAgIGNsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LFxuICAgICAgaHR0cE1ldGhvZDogdGhpcy5jdXJyZW50UmVxdWVzdC5odHRwTWV0aG9kKCksXG4gICAgICBodHRwVmVyc2lvbjogdGhpcy5jdXJyZW50UmVxdWVzdC5odHRwVmVyc2lvbigpLFxuICAgICAgcGF0aDogdGhpcy5jdXJyZW50UmVxdWVzdC5wYXRoKCksXG4gICAgICBxdWV1ZUxlbmd0aDogdGhpcy5yZXF1ZXN0UnVubmVycy5sZW5ndGhcbiAgICB9XSlcblxuICAgIGlmICh0aGlzLl9pc1dlYnNvY2tldFVwZ3JhZGUodGhpcy5jdXJyZW50UmVxdWVzdCkpIHtcbiAgICAgIHRoaXMuX3VwZ3JhZGVUb1dlYnNvY2tldCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBXZSBhcmUgZG9uZSBwYXJzaW5nIHRoZSBnaXZlbiByZXF1ZXN0IGFuZCBjYW4gdGhlb3JldGljYWxseSBzdGFydCBwYXJzaW5nIGEgbmV3IG9uZSwgYmVmb3JlIHRoZSBjdXJyZW50IHJlcXVlc3QgaXMgZG9uZSAtIHNvIHJlc2V0IHRoZSBzdGF0ZS5cbiAgICB0aGlzLnN0YXRlID0gXCJpbml0aWFsXCJcblxuICAgIGNvbnN0IHJlcXVlc3RSdW5uZXIgPSBuZXcgUmVxdWVzdFJ1bm5lcih7XG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICByZXF1ZXN0OiB0aGlzLmN1cnJlbnRSZXF1ZXN0XG4gICAgfSlcblxuICAgIHRoaXMucmVxdWVzdFJ1bm5lcnMucHVzaChyZXF1ZXN0UnVubmVyKVxuXG4gICAgcmVxdWVzdFJ1bm5lci5ldmVudHMub24oXCJkb25lXCIsIHRoaXMucmVxdWVzdERvbmUpXG4gICAgcmVxdWVzdFJ1bm5lci5ydW4oKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIC0gRGF0YSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBvbldyaXRlKGRhdGEpIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJvbldyaXRlIHN0YXJ0XCIsIHtcbiAgICAgIGNsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICAuLi5zdW1tYXJpemVSZXF1ZXN0RGF0YShkYXRhKVxuICAgIH1dKVxuXG4gICAgaWYgKHRoaXMud2Vic29ja2V0U2Vzc2lvbikge1xuICAgICAgdGhpcy53ZWJzb2NrZXRTZXNzaW9uLm9uRGF0YShkYXRhKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8qKiBAdHlwZSB7QnVmZmVyIHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHJlbWFpbmluZyA9IGRhdGFcblxuICAgICAgd2hpbGUgKHJlbWFpbmluZyAmJiByZW1haW5pbmcubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PSBcImluaXRpYWxcIikge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIm9uV3JpdGUgY3JlYXRpbmcgcmVxdWVzdCBwYXJzZXJcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCByZW1haW5pbmdMZW5ndGg6IHJlbWFpbmluZy5sZW5ndGh9XSlcbiAgICAgICAgICB0aGlzLmN1cnJlbnRSZXF1ZXN0ID0gbmV3IFJlcXVlc3Qoe2NsaWVudDogdGhpcywgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSlcbiAgICAgICAgICB0aGlzLmN1cnJlbnRSZXF1ZXN0LnJlcXVlc3RQYXJzZXIuZXZlbnRzLm9uKFwiZG9uZVwiLCB0aGlzLmV4ZWN1dGVDdXJyZW50UmVxdWVzdClcbiAgICAgICAgICB0aGlzLnN0YXRlID0gXCJyZXF1ZXN0U3RhcnRlZFwiXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSAhPSBcInJlcXVlc3RTdGFydGVkXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3RhdGUgZm9yIGNsaWVudDogJHt0aGlzLnN0YXRlfWApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFJlcXVlc3QpIHRocm93IG5ldyBFcnJvcihcIk5vIGN1cnJlbnQgcmVxdWVzdFwiKVxuXG4gICAgICAgIHJlbWFpbmluZyA9IHRoaXMuY3VycmVudFJlcXVlc3QuZmVlZChyZW1haW5pbmcpXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIm9uV3JpdGUgZmVkIHBhcnNlclwiLCB7XG4gICAgICAgICAgY2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsXG4gICAgICAgICAgaGFzUmVtYWluaW5nOiBCb29sZWFuKHJlbWFpbmluZz8ubGVuZ3RoKSxcbiAgICAgICAgICByZW1haW5pbmdMZW5ndGg6IHJlbWFpbmluZz8ubGVuZ3RoIHx8IDAsXG4gICAgICAgICAgcGFyc2VyQ29tcGxldGVkOiB0aGlzLmN1cnJlbnRSZXF1ZXN0Py5nZXRSZXF1ZXN0UGFyc2VyKCkuaGFzQ29tcGxldGVkXG4gICAgICAgIH1dKVxuXG4gICAgICAgIGlmIChyZW1haW5pbmcgJiYgcmVtYWluaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0UGFyc2VyID0gdGhpcy5jdXJyZW50UmVxdWVzdC5nZXRSZXF1ZXN0UGFyc2VyKClcblxuICAgICAgICAgIGlmICghcmVxdWVzdFBhcnNlci5oYXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIm9uV3JpdGUgd2FpdGluZyBmb3IgbW9yZSBkYXRhXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgcmVtYWluaW5nTGVuZ3RoOiByZW1haW5pbmcubGVuZ3RofV0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc3RhdGUgPSBcImluaXRpYWxcIlxuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIm9uV3JpdGUgcGFyc2VyIGNvbXBsZXRlZCB3aXRoIHJlbWFpbmluZyBieXRlc1wiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIHJlbWFpbmluZ0xlbmd0aDogcmVtYWluaW5nLmxlbmd0aH1dKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJvbldyaXRlIGVuZFwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIHN0YXRlOiB0aGlzLnN0YXRlLCBxdWV1ZUxlbmd0aDogdGhpcy5yZXF1ZXN0UnVubmVycy5sZW5ndGh9XSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVCYWRSZXF1ZXN0KGVuc3VyZUVycm9yKGVycm9yKSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3JlcXVlc3QuanNcIikuZGVmYXVsdH0gcmVxdWVzdCAtIFJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHdlYnNvY2tldCB1cGdyYWRlLlxuICAgKi9cbiAgX2lzV2Vic29ja2V0VXBncmFkZShyZXF1ZXN0KSB7XG4gICAgY29uc3QgdXBncmFkZUhlYWRlciA9IHJlcXVlc3QuaGVhZGVyKFwidXBncmFkZVwiKT8udG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IGNvbm5lY3Rpb25IZWFkZXIgPSByZXF1ZXN0LmhlYWRlcihcImNvbm5lY3Rpb25cIik/LnRvTG93ZXJDYXNlKClcblxuICAgIHJldHVybiBCb29sZWFuKHVwZ3JhZGVIZWFkZXIgPT0gXCJ3ZWJzb2NrZXRcIiAmJiBjb25uZWN0aW9uSGVhZGVyPy5pbmNsdWRlcyhcInVwZ3JhZGVcIikpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLiAgKi9cbiAgX3VwZ3JhZGVUb1dlYnNvY2tldCgpIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFJlcXVlc3QpIHRocm93IG5ldyBFcnJvcihcIk5vIGN1cnJlbnQgcmVxdWVzdFwiKVxuXG4gICAgY29uc3Qgc2VjV2Vic29ja2V0S2V5ID0gdGhpcy5jdXJyZW50UmVxdWVzdC5oZWFkZXIoXCJzZWMtd2Vic29ja2V0LWtleVwiKVxuXG4gICAgaWYgKCFzZWNXZWJzb2NrZXRLZXkpIHtcbiAgICAgIHRoaXMuX3NlbmRCYWRVcGdyYWRlUmVzcG9uc2UoXCJNaXNzaW5nIFNlYy1XZWJTb2NrZXQtS2V5IGhlYWRlclwiKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgd2Vic29ja2V0QWNjZXB0S2V5ID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGExXCIpXG4gICAgICAudXBkYXRlKGAke3NlY1dlYnNvY2tldEtleX0yNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFgLCBcImJpbmFyeVwiKVxuICAgICAgLmRpZ2VzdChcImJhc2U2NFwiKVxuICAgIGNvbnN0IGh0dHBWZXJzaW9uID0gdGhpcy5jdXJyZW50UmVxdWVzdC5odHRwVmVyc2lvbigpIHx8IFwiMS4xXCJcbiAgICBjb25zdCByZXNwb25zZUxpbmVzID0gW1xuICAgICAgYEhUVFAvJHtodHRwVmVyc2lvbn0gMTAxIFN3aXRjaGluZyBQcm90b2NvbHNgLFxuICAgICAgXCJVcGdyYWRlOiB3ZWJzb2NrZXRcIixcbiAgICAgIFwiQ29ubmVjdGlvbjogVXBncmFkZVwiLFxuICAgICAgYFNlYy1XZWJTb2NrZXQtQWNjZXB0OiAke3dlYnNvY2tldEFjY2VwdEtleX1gLFxuICAgICAgXCJcIixcbiAgICAgIFwiXCJcbiAgICBdXG4gICAgY29uc3QgcmVzcG9uc2UgPSByZXNwb25zZUxpbmVzLmpvaW4oXCJcXHJcXG5cIilcblxuICAgIGNvbnN0IG1lc3NhZ2VIYW5kbGVyUmVzb2x2ZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0V2Vic29ja2V0TWVzc2FnZUhhbmRsZXJSZXNvbHZlcj8uKClcbiAgICBsZXQgbWVzc2FnZUhhbmRsZXJcbiAgICBsZXQgbWVzc2FnZUhhbmRsZXJQcm9taXNlXG5cbiAgICBpZiAobWVzc2FnZUhhbmRsZXJSZXNvbHZlcikge1xuICAgICAgY29uc3QgcmVzb2x2ZWRIYW5kbGVyID0gbWVzc2FnZUhhbmRsZXJSZXNvbHZlcih7XG4gICAgICAgIGNsaWVudDogdGhpcyxcbiAgICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgICByZXF1ZXN0OiB0aGlzLmN1cnJlbnRSZXF1ZXN0XG4gICAgICB9KVxuXG4gICAgICBjb25zdCByZXNvbHZlZFRoZW5hYmxlID0gLyoqIEB0eXBlIHt7dGhlbj86ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd259fSAqLyAocmVzb2x2ZWRIYW5kbGVyKVxuXG4gICAgICBpZiAocmVzb2x2ZWRUaGVuYWJsZT8udGhlbikge1xuICAgICAgICBtZXNzYWdlSGFuZGxlclByb21pc2UgPSAvKiogQHR5cGUge1Byb21pc2U8aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5XZWJzb2NrZXRNZXNzYWdlSGFuZGxlciB8IHZvaWQ+fSAqLyAocmVzb2x2ZWRIYW5kbGVyKVxuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlZEhhbmRsZXIpIHtcbiAgICAgICAgbWVzc2FnZUhhbmRsZXIgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuV2Vic29ja2V0TWVzc2FnZUhhbmRsZXJ9ICovIChyZXNvbHZlZEhhbmRsZXIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy53ZWJzb2NrZXRTZXNzaW9uID0gbmV3IFdlYnNvY2tldFNlc3Npb24oe1xuICAgICAgY2xpZW50OiB0aGlzLFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgdXBncmFkZVJlcXVlc3Q6IHRoaXMuY3VycmVudFJlcXVlc3QsXG4gICAgICBtZXNzYWdlSGFuZGxlcjogbWVzc2FnZUhhbmRsZXIsXG4gICAgICBtZXNzYWdlSGFuZGxlclByb21pc2U6IG1lc3NhZ2VIYW5kbGVyUHJvbWlzZVxuICAgIH0pXG4gICAgdGhpcy53ZWJzb2NrZXRTZXNzaW9uLmV2ZW50cy5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgIHRoaXMud2Vic29ja2V0U2Vzc2lvbj8uZGVzdHJveSgpXG4gICAgICB0aGlzLndlYnNvY2tldFNlc3Npb24gPSB1bmRlZmluZWRcbiAgICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJjbG9zZVwiKVxuICAgIH0pXG4gICAgdGhpcy5zdGF0ZSA9IFwid2Vic29ja2V0XCJcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwib3V0cHV0XCIsIHJlc3BvbnNlKVxuICAgIHZvaWQgdGhpcy53ZWJzb2NrZXRTZXNzaW9uLmluaXRpYWxpemVDaGFubmVsKClcbiAgfVxuXG4gIHJlcXVlc3REb25lID0gKCkgPT4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcInJlcXVlc3REb25lXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgcXVldWVMZW5ndGg6IHRoaXMucmVxdWVzdFJ1bm5lcnMubGVuZ3RofV0pXG4gICAgdm9pZCB0aGlzLnNlbmREb25lUmVxdWVzdHMoKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJGYWlsZWQgd2hpbGUgc2VuZGluZyBkb25lIHJlcXVlc3RzXCIsIGVycm9yKVxuICAgICAgdGhpcy5ldmVudHMuZW1pdChcImNsb3NlXCIpXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIHNlbmREb25lUmVxdWVzdHMoKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RSdW5uZXIgPSB0aGlzLnJlcXVlc3RSdW5uZXJzWzBdXG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdFJ1bm5lcj8uZ2V0UmVxdWVzdCgpXG5cbiAgICAgIGlmIChyZXF1ZXN0UnVubmVyPy5nZXRTdGF0ZSgpID09IFwiZG9uZVwiKSB7XG4gICAgICAgIGNvbnN0IGh0dHBWZXJzaW9uID0gcmVxdWVzdC5odHRwVmVyc2lvbigpXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25IZWFkZXIgPSByZXF1ZXN0LmhlYWRlcihcImNvbm5lY3Rpb25cIik/LnRvTG93ZXJDYXNlKCk/LnRyaW0oKVxuICAgICAgICBjb25zdCBzaG91bGRDbG9zZUNvbm5lY3Rpb24gPSB0aGlzLnNob3VsZENsb3NlQ29ubmVjdGlvbihyZXF1ZXN0KVxuXG4gICAgICAgIHRoaXMucmVxdWVzdFJ1bm5lcnMuc2hpZnQoKVxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzZW5kRG9uZVJlcXVlc3RzIHNoaWZ0ZWQgcXVldWVcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCBxdWV1ZUxlbmd0aDogdGhpcy5yZXF1ZXN0UnVubmVycy5sZW5ndGh9XSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNlbmRSZXNwb25zZShyZXF1ZXN0UnVubmVyKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCgpID0+IFtgVmVsb2Npb3VzIGNsaWVudCAke3RoaXMuY2xpZW50Q291bnR9IGZhaWxlZCB3aGlsZSBzZW5kaW5nIHJlc3BvbnNlYCwgZXJyb3JdKVxuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFJlcXVlc3QgPT09IHJlcXVlc3QgJiYgdGhpcy5zdGF0ZSA9PT0gXCJpbml0aWFsXCIpIHRoaXMuY3VycmVudFJlcXVlc3QgPSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic2VuZERvbmVSZXF1ZXN0c1wiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIGNvbm5lY3Rpb25IZWFkZXIsIGh0dHBWZXJzaW9ufV0pXG5cbiAgICAgICAgaWYgKHNob3VsZENsb3NlQ29ubmVjdGlvbikge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtgQ2xvc2luZyB0aGUgY29ubmVjdGlvbiBiZWNhdXNlICR7aHR0cFZlcnNpb259IGFuZCBjb25uZWN0aW9uIGhlYWRlciAke2Nvbm5lY3Rpb25IZWFkZXJ9YCwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50fV0pXG4gICAgICAgICAgdGhpcy5ldmVudHMuZW1pdChcImNsb3NlXCIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVxdWVzdFJ1bm5lcn0gcmVxdWVzdFJ1bm5lciAtIFJlcXVlc3QgcnVubmVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgc2VuZFJlc3BvbnNlKHJlcXVlc3RSdW5uZXIpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGRpZ2cocmVxdWVzdFJ1bm5lciwgXCJyZXNwb25zZVwiKVxuICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0UnVubmVyLmdldFJlcXVlc3QoKVxuICAgIGNvbnN0IGZpbGVQYXRoID0gcmVzcG9uc2UuZ2V0RmlsZVBhdGgoKVxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpXG4gICAgY29uc3QgY29ubmVjdGlvbkhlYWRlciA9IHJlcXVlc3QuaGVhZGVyKFwiY29ubmVjdGlvblwiKT8udG9Mb3dlckNhc2UoKT8udHJpbSgpXG4gICAgY29uc3QgaHR0cFZlcnNpb24gPSByZXF1ZXN0Lmh0dHBWZXJzaW9uKClcbiAgICBjb25zdCBzaG91bGRDbG9zZUNvbm5lY3Rpb24gPSB0aGlzLnNob3VsZENsb3NlQ29ubmVjdGlvbihyZXF1ZXN0KVxuICAgIGNvbnN0IGhhc0ZpbGVQYXRoID0gdHlwZW9mIGZpbGVQYXRoID09PSBcInN0cmluZ1wiICYmIGZpbGVQYXRoLmxlbmd0aCA+IDBcbiAgICBjb25zdCBib2R5ID0gaGFzRmlsZVBhdGggPyBudWxsIDogcmVzcG9uc2UuZ2V0Qm9keSgpXG4gICAgY29uc3QgYm9keUlzU3RyaW5nID0gdHlwZW9mIGJvZHkgPT09IFwic3RyaW5nXCJcbiAgICBjb25zdCBib2R5SXNCaW5hcnkgPSBib2R5IGluc3RhbmNlb2YgVWludDhBcnJheVxuXG4gICAgaWYgKCFoYXNGaWxlUGF0aCAmJiAhYm9keUlzU3RyaW5nICYmICFib2R5SXNCaW5hcnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcmVzcG9uc2UgYm9keSB0byBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5LCBnb3QgJHt0eXBlb2YgYm9keX1gKVxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwic2VuZFJlc3BvbnNlXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgY29ubmVjdGlvbkhlYWRlciwgaHR0cFZlcnNpb259KVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcInNlbmRSZXNwb25zZSBwYXlsb2FkXCIsIHtcbiAgICAgIGNsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LFxuICAgICAgaGFzRmlsZVBhdGgsXG4gICAgICBmaWxlUGF0aCxcbiAgICAgIGJvZHlJc0JpbmFyeSxcbiAgICAgIGJvZHlJc1N0cmluZ1xuICAgIH1dKVxuXG4gICAgaWYgKHNob3VsZENsb3NlQ29ubmVjdGlvbikge1xuICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQ29ubmVjdGlvblwiLCBcIkNsb3NlXCIpXG4gICAgfSBlbHNlIGlmIChodHRwVmVyc2lvbiA9PSBcIjEuMFwiICYmIGNvbm5lY3Rpb25IZWFkZXIgPT0gXCJrZWVwLWFsaXZlXCIpIHtcbiAgICAgIHJlc3BvbnNlLnNldEhlYWRlcihcIkNvbm5lY3Rpb25cIiwgXCJLZWVwLUFsaXZlXCIpXG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnRMZW5ndGhcblxuICAgIGlmIChoYXNGaWxlUGF0aCkge1xuICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKVxuICAgICAgY29udGVudExlbmd0aCA9IHN0YXRzLnNpemVcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudExlbmd0aCA9IGJvZHlJc1N0cmluZyA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShib2R5KS5sZW5ndGggOiBib2R5LmJ5dGVMZW5ndGhcbiAgICB9XG5cbiAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LUxlbmd0aFwiLCBjb250ZW50TGVuZ3RoKVxuICAgIHJlc3BvbnNlLnNldEhlYWRlcihcIkRhdGVcIiwgZGF0ZS50b1VUQ1N0cmluZygpKVxuICAgIHJlc3BvbnNlLnNldEhlYWRlcihcIlNlcnZlclwiLCBcIlZlbG9jaW91c1wiKVxuXG4gICAgbGV0IGhlYWRlcnMgPSBcIlwiXG5cbiAgICBoZWFkZXJzICs9IGBIVFRQLyR7cmVxdWVzdC5odHRwVmVyc2lvbigpfSAke3Jlc3BvbnNlLmdldFN0YXR1c0NvZGUoKX0gJHtyZXNwb25zZS5nZXRTdGF0dXNNZXNzYWdlKCl9XFxyXFxuYFxuXG4gICAgZm9yIChjb25zdCBoZWFkZXJLZXkgaW4gcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgZm9yIChjb25zdCBoZWFkZXJWYWx1ZSBvZiByZXNwb25zZS5oZWFkZXJzW2hlYWRlcktleV0pIHtcbiAgICAgICAgaGVhZGVycyArPSBgJHtoZWFkZXJLZXl9OiAke2hlYWRlclZhbHVlfVxcclxcbmBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoZWFkZXJzICs9IFwiXFxyXFxuXCJcblxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvdXRwdXRcIiwgaGVhZGVycylcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzZW5kUmVzcG9uc2UgaGVhZGVycyBlbWl0dGVkXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgaGVhZGVyc0xlbmd0aDogaGVhZGVycy5sZW5ndGh9XSlcblxuICAgIGlmIChoYXNGaWxlUGF0aCkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kRmlsZU91dHB1dChmaWxlUGF0aClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ldmVudHMuZW1pdChcIm91dHB1dFwiLCBib2R5KVxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic2VuZFJlc3BvbnNlIGJvZHkgZW1pdHRlZFwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIGJvZHlMZW5ndGg6IGJvZHlJc1N0cmluZyA/IGJvZHkubGVuZ3RoIDogYm9keS5ieXRlTGVuZ3RofV0pXG4gICAgfVxuXG4gICAgaWYgKFwiZ2V0UmVxdWVzdFBhcnNlclwiIGluIHJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3JlcXVlc3QuanNcIikuZGVmYXVsdH0gKi8gKHJlcXVlc3QpXG4gICAgICBodHRwUmVxdWVzdC5nZXRSZXF1ZXN0UGFyc2VyKCkuZGVzdHJveSgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCAtIEZpbGUgcGF0aC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHNlbmRGaWxlT3V0cHV0KGZpbGVQYXRoKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic2VuZEZpbGVPdXRwdXQgc3RhcnRcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCBmaWxlUGF0aH1dKVxuICAgIGxldCB0b3RhbEJ5dGVzID0gMFxuICAgIGxldCBjaHVua0NvdW50ID0gMFxuXG4gICAgdHJ5IHtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCkpIHtcbiAgICAgICAgY2h1bmtDb3VudCArPSAxXG4gICAgICAgIHRvdGFsQnl0ZXMgKz0gY2h1bmsubGVuZ3RoXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcInNlbmRGaWxlT3V0cHV0IGNodW5rXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgY2h1bmtDb3VudCwgY2h1bmtMZW5ndGg6IGNodW5rLmxlbmd0aCwgdG90YWxCeXRlc31dKVxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KFwib3V0cHV0XCIsIGNodW5rKVxuICAgICAgfVxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic2VuZEZpbGVPdXRwdXQgZG9uZVwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIGNodW5rQ291bnQsIHRvdGFsQnl0ZXN9XSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoKCkgPT4gW2BWZWxvY2lvdXMgY2xpZW50ICR7dGhpcy5jbGllbnRDb3VudH0gZmFpbGVkIHdoaWxlIHN0cmVhbWluZyBmaWxlIG91dHB1dDogJHtmaWxlUGF0aH1gLCBlcnJvcl0pXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSByZXF1ZXN0IC0gUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gc2hvdWxkIGJlIGNsb3NlZC5cbiAgICovXG4gIHNob3VsZENsb3NlQ29ubmVjdGlvbihyZXF1ZXN0KSB7XG4gICAgY29uc3QgaHR0cFZlcnNpb24gPSByZXF1ZXN0Lmh0dHBWZXJzaW9uKClcbiAgICBjb25zdCBjb25uZWN0aW9uSGVhZGVyID0gcmVxdWVzdC5oZWFkZXIoXCJjb25uZWN0aW9uXCIpPy50b0xvd2VyQ2FzZSgpPy50cmltKClcbiAgICBjb25zdCBjb25uZWN0aW9uVG9rZW5zID0gY29ubmVjdGlvbkhlYWRlclxuICAgICAgPyBjb25uZWN0aW9uSGVhZGVyLnNwbGl0KFwiLFwiKS5tYXAoKHRva2VuKSA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKVxuICAgICAgOiBbXVxuXG4gICAgaWYgKGh0dHBWZXJzaW9uID09IFwid2Vic29ja2V0XCIpIHJldHVybiBmYWxzZVxuICAgIGlmIChjb25uZWN0aW9uVG9rZW5zLmluY2x1ZGVzKFwiY2xvc2VcIikpIHJldHVybiB0cnVlXG5cbiAgICBpZiAoaHR0cFZlcnNpb24gPT0gXCIxLjBcIiAmJiBjb25uZWN0aW9uSGVhZGVyICE9IFwia2VlcC1hbGl2ZVwiKSByZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiJdfQ==
|
|
@@ -17,8 +17,9 @@ export default class ParamsToObject {
|
|
|
17
17
|
* @param {any} value - Value to use.
|
|
18
18
|
* @param {string} rest - Rest.
|
|
19
19
|
* @param {Record<string, any> | any[]} result - Result.
|
|
20
|
+
* @param {string} [fullKey] - Original full key.
|
|
20
21
|
* @returns {void} - No return value.
|
|
21
22
|
*/
|
|
22
|
-
treatSecond(value: any, rest: string, result: Record<string, any> | any[]): void;
|
|
23
|
+
treatSecond(value: any, rest: string, result: Record<string, any> | any[], fullKey?: string): void;
|
|
23
24
|
}
|
|
24
25
|
//# sourceMappingURL=params-to-object.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"params-to-object.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/params-to-object.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"params-to-object.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/params-to-object.js"],"names":[],"mappings":"AAyBA;IACE;;OAEG;IACH,oBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAI7B;IADC,4BAAoB;IAGtB,oDAAoD;IACpD,YADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAYhC;IAED;;;;;OAKG;IACH,kBALW,MAAM,SACN,GAAG,UACH,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,GACzB,IAAI,CA0BhB;IAED;;;;;;OAMG;IACH,mBANW,GAAG,QACH,MAAM,UACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,YAC3B,MAAM,GACJ,IAAI,CAkChB;CACF"}
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
+
/**
|
|
3
|
+
* @param {object} args - Args.
|
|
4
|
+
* @param {string} args.key - Parameter key.
|
|
5
|
+
* @param {string} args.rest - Remaining unmatched segment.
|
|
6
|
+
* @returns {Error} - Error with parser context attached.
|
|
7
|
+
*/
|
|
8
|
+
function malformedNestedParamsKeyError(args) {
|
|
9
|
+
const { key, rest } = args;
|
|
10
|
+
const error = new Error(`Could not parse nested params key "${key}" at rest "${rest}"`);
|
|
11
|
+
/** @type {Error & {velociousContext?: Record<string, unknown>}} */
|
|
12
|
+
const typedError = error;
|
|
13
|
+
typedError.velociousContext = {
|
|
14
|
+
nestedParamsKey: {
|
|
15
|
+
key,
|
|
16
|
+
rest,
|
|
17
|
+
stage: "params-to-object"
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
return error;
|
|
21
|
+
}
|
|
2
22
|
export default class ParamsToObject {
|
|
3
23
|
/**
|
|
4
24
|
* @param {Record<string, any>} object - Object.
|
|
@@ -40,7 +60,7 @@ export default class ParamsToObject {
|
|
|
40
60
|
newResult = {};
|
|
41
61
|
result[inputName] = newResult;
|
|
42
62
|
}
|
|
43
|
-
this.treatSecond(value, rest, newResult);
|
|
63
|
+
this.treatSecond(value, rest, newResult, key);
|
|
44
64
|
}
|
|
45
65
|
else {
|
|
46
66
|
result[key] = value;
|
|
@@ -50,12 +70,13 @@ export default class ParamsToObject {
|
|
|
50
70
|
* @param {any} value - Value to use.
|
|
51
71
|
* @param {string} rest - Rest.
|
|
52
72
|
* @param {Record<string, any> | any[]} result - Result.
|
|
73
|
+
* @param {string} [fullKey] - Original full key.
|
|
53
74
|
* @returns {void} - No return value.
|
|
54
75
|
*/
|
|
55
|
-
treatSecond(value, rest, result) {
|
|
76
|
+
treatSecond(value, rest, result, fullKey = rest) {
|
|
56
77
|
const secondMatch = rest.match(/^\[(.*?)\]([\s\S]*)$/);
|
|
57
78
|
if (!secondMatch)
|
|
58
|
-
throw
|
|
79
|
+
throw malformedNestedParamsKeyError({ key: fullKey, rest });
|
|
59
80
|
const key = secondMatch[1];
|
|
60
81
|
const newRest = secondMatch[2];
|
|
61
82
|
/** @type {Array<any> | Record<string, any>} */
|
|
@@ -81,8 +102,8 @@ export default class ParamsToObject {
|
|
|
81
102
|
newResult = {};
|
|
82
103
|
result[key] = newResult;
|
|
83
104
|
}
|
|
84
|
-
this.treatSecond(value, newRest, newResult);
|
|
105
|
+
this.treatSecond(value, newRest, newResult, fullKey);
|
|
85
106
|
}
|
|
86
107
|
}
|
|
87
108
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLXRvLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci9jbGllbnQvcGFyYW1zLXRvLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7O0dBS0c7QUFDSCxTQUFTLDZCQUE2QixDQUFDLElBQUk7SUFDekMsTUFBTSxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsR0FBRyxJQUFJLENBQUE7SUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsc0NBQXNDLEdBQUcsY0FBYyxJQUFJLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZGLG1FQUFtRTtJQUNuRSxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUE7SUFFeEIsVUFBVSxDQUFDLGdCQUFnQixHQUFHO1FBQzVCLGVBQWUsRUFBRTtZQUNmLEdBQUc7WUFDSCxJQUFJO1lBQ0osS0FBSyxFQUFFLGtCQUFrQjtTQUMxQjtLQUNGLENBQUE7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLGNBQWM7SUFDakM7O09BRUc7SUFDSCxZQUFZLE1BQU07UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7SUFDdEIsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxRQUFRO1FBQ04sc0NBQXNDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUVqQixLQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBRTlCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN2QyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZ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bSB7b2JqZWN0fSBhcmdzIC0gQXJncy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmtleSAtIFBhcmFtZXRlciBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5yZXN0IC0gUmVtYWluaW5nIHVubWF0Y2hlZCBzZWdtZW50LlxuICogQHJldHVybnMge0Vycm9yfSAtIEVycm9yIHdpdGggcGFyc2VyIGNvbnRleHQgYXR0YWNoZWQuXG4gKi9cbmZ1bmN0aW9uIG1hbGZvcm1lZE5lc3RlZFBhcmFtc0tleUVycm9yKGFyZ3MpIHtcbiAgY29uc3Qge2tleSwgcmVzdH0gPSBhcmdzXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgbmVzdGVkIHBhcmFtcyBrZXkgXCIke2tleX1cIiBhdCByZXN0IFwiJHtyZXN0fVwiYClcbiAgLyoqIEB0eXBlIHtFcnJvciAmIHt2ZWxvY2lvdXNDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj59fSAqL1xuICBjb25zdCB0eXBlZEVycm9yID0gZXJyb3JcblxuICB0eXBlZEVycm9yLnZlbG9jaW91c0NvbnRleHQgPSB7XG4gICAgbmVzdGVkUGFyYW1zS2V5OiB7XG4gICAgICBrZXksXG4gICAgICByZXN0LFxuICAgICAgc3RhZ2U6IFwicGFyYW1zLXRvLW9iamVjdFwiXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFtc1RvT2JqZWN0IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqZWN0IC0gT2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Iob2JqZWN0KSB7XG4gICAgdGhpcy5vYmplY3QgPSBvYmplY3RcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgYW55Pn0gLSBUaGUgb2JqZWN0LiAgKi9cbiAgdG9PYmplY3QoKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi9cbiAgICBjb25zdCByZXN1bHQgPSB7fVxuXG4gICAgZm9yKGNvbnN0IGtleSBpbiB0aGlzLm9iamVjdCkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm9iamVjdFtrZXldXG5cbiAgICAgIHRoaXMudHJlYXRJbml0aWFsKGtleSwgdmFsdWUsIHJlc3VsdClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEtleS5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVmFsdWUgdG8gdXNlLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT4gfCBhbnlbXX0gcmVzdWx0IC0gUmVzdWx0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0cmVhdEluaXRpYWwoa2V5LCB2YWx1ZSwgcmVzdWx0KSB7XG4gICAgY29uc3QgZmlyc3RNYXRjaCA9IGtleS5tYXRjaCgvXiguKz8pKFxcWyhbXFxzXFxTXSskKSkvKVxuXG4gICAgaWYgKGZpcnN0TWF0Y2gpIHtcbiAgICAgIGNvbnN0IGlucHV0TmFtZSA9IGZpcnN0TWF0Y2hbMV1cbiAgICAgIGNvbnN0IHJlc3QgPSBmaXJzdE1hdGNoWzJdXG5cbiAgICAgIC8qKiBAdHlwZSB7QXJyYXk8YW55PiB8IFJlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgICBsZXQgbmV3UmVzdWx0XG5cbiAgICAgIGlmIChpbnB1dE5hbWUgaW4gcmVzdWx0KSB7XG4gICAgICAgIG5ld1Jlc3VsdCA9IHJlc3VsdFtpbnB1dE5hbWVdXG4gICAgICB9IGVsc2UgaWYgKHJlc3QgPT0gXCJbXVwiKSB7XG4gICAgICAgIG5ld1Jlc3VsdCA9IFtdXG4gICAgICAgIHJlc3VsdFtpbnB1dE5hbWVdID0gbmV3UmVzdWx0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdSZXN1bHQgPSB7fVxuICAgICAgICByZXN1bHRbaW5wdXROYW1lXSA9IG5ld1Jlc3VsdFxuICAgICAgfVxuXG4gICAgICB0aGlzLnRyZWF0U2Vjb25kKHZhbHVlLCByZXN0LCBuZXdSZXN1bHQsIGtleSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBWYWx1ZSB0byB1c2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZXN0IC0gUmVzdC5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgYW55W119IHJlc3VsdCAtIFJlc3VsdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmdWxsS2V5XSAtIE9yaWdpbmFsIGZ1bGwga2V5LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0cmVhdFNlY29uZCh2YWx1ZSwgcmVzdCwgcmVzdWx0LCBmdWxsS2V5ID0gcmVzdCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gcmVzdC5tYXRjaCgvXlxcWyguKj8pXFxdKFtcXHNcXFNdKikkLylcblxuICAgIGlmICghc2Vjb25kTWF0Y2gpIHRocm93IG1hbGZvcm1lZE5lc3RlZFBhcmFtc0tleUVycm9yKHtrZXk6IGZ1bGxLZXksIHJlc3R9KVxuXG4gICAgY29uc3Qga2V5ID0gc2Vjb25kTWF0Y2hbMV1cbiAgICBjb25zdCBuZXdSZXN0ID0gc2Vjb25kTWF0Y2hbMl1cblxuICAgIC8qKiBAdHlwZSB7QXJyYXk8YW55PiB8IFJlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgbGV0IG5ld1Jlc3VsdFxuXG4gICAgaWYgKHJlc3QgPT0gXCJbXVwiKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFycmF5IHJlc3VsdCBmb3IgcmVzdCAke3Jlc3R9YClcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpXG4gICAgfSBlbHNlIGlmIChuZXdSZXN0ID09IFwiXCIpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gXCJvYmplY3RcIiAmJiBrZXkgaW4gcmVzdWx0KSB7XG4gICAgICAgIG5ld1Jlc3VsdCA9IHJlc3VsdFtrZXldXG4gICAgICB9IGVsc2UgaWYgKG5ld1Jlc3QgPT0gXCJbXVwiKSB7XG4gICAgICAgIG5ld1Jlc3VsdCA9IFtdXG4gICAgICAgIHJlc3VsdFtrZXldID0gbmV3UmVzdWx0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdSZXN1bHQgPSB7fVxuICAgICAgICByZXN1bHRba2V5XSA9IG5ld1Jlc3VsdFxuICAgICAgfVxuXG4gICAgICB0aGlzLnRyZWF0U2Vjb25kKHZhbHVlLCBuZXdSZXN0LCBuZXdSZXN1bHQsIGZ1bGxLZXkpXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/http-server/client/request-buffer/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/http-server/client/request-buffer/index.js"],"names":[],"mappings":"AAsBA;IAkBE;;;OAGG;IACH,+BAFG;QAA0D,aAAa,EAA/D,OAAO,2BAA2B,EAAE,OAAO;KACrD,EAIA;IAxBD,mBAAc;IAEd,uBAAuB;IACvB,MADW,MAAM,EAAE,CACV;IAET,mEAA2B;IAE3B,qCAAqC;IACrC,eADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACf;IAElB,4BAA0B;IAE1B,mBAAiB;IACjB,WAAW;IACX,qBAAmB;IACnB,cAAgB;IAOd,2DAAkC;IAClC,eAA8C;IAGhD,gBAEC;IAED;;;OAGG;IACH,WAHW,MAAM,GACJ,MAAM,GAAG,SAAS,CAsG9B;IArES,0BAA6B;IAS7B,8BAA8B;IA8DxC;;;OAGG;IACH,gBAHW,MAAM,GACJ,MAAM,CAQlB;IAED;;OAEG;IACH,kBAFa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAalC;IAED;;OAEG;IACH,oBAFa,IAAI,CAWhB;IAJC,2BAA6B;IAM/B,gCAEC;IAED;;OAEG;IACH,mBAFa,IAAI,CAKhB;IAED;;;OAGG;IACH,YAHW,MAAM,GACJ,IAAI,CAoChB;IAED;;;OAGG;IACH,yBAHW,MAAM,GACJ,MAAM,GAAG,SAAS,CAU9B;IAED;;OAEG;IACH,kBAFW,MAAM,QAQhB;IADwC,sBAAgD;IAGzF;;;OAGG;IACH,kBAHW,MAAM,GACJ,IAAI,CAgDhB;IArBO,iBAAwB;IACxB,qBAA4C;IAC5C,yBAAoD;IACpD,wBAAiD;IAQjD,uBAAuB;IACvB,eADW,MAAM,EAAE,CACI;IAW/B;;;OAGG;IACH,sBAHW,MAAM,GACJ,IAAI,CAchB;IALC,mBAA0B;IAC1B,oBAA2B;IAC3B,aAAoB;IAKtB,wBASC;IAPG,cAAmE;IASvE;;;OAGG;IACH,+BAHW,MAAM,GACJ,OAAO,CAInB;IAED;;OAEG;IACH,qBAFa,OAAO,CAMnB;IAED;;OAEG;IACH,yBAFa,IAAI,CAOhB;IAJC,wBAA0B;IAC1B,yBAAiC;IAKnC;;;OAGG;IACH,yBAHW,MAAM,GACJ,IAAI,CAuBhB;IAED;;OAEG;IACH,qBAFa,IAAI,CAQhB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,IAAI,CAKhB;IAED,4BAaC;IAED,mCAMC;IAED,mCA2BC;CACF;mBAhekB,aAAa;mBAEb,oBAAoB;yBAHd,qBAAqB"}
|
|
@@ -6,6 +6,18 @@ import { incorporate } from "incorporator";
|
|
|
6
6
|
import Logger from "../../../logger.js";
|
|
7
7
|
import ParamsToObject from "../params-to-object.js";
|
|
8
8
|
import querystring from "querystring";
|
|
9
|
+
/**
|
|
10
|
+
* @param {string | undefined} input - Input string.
|
|
11
|
+
* @param {number} [limit] - Max preview length.
|
|
12
|
+
* @returns {string | undefined} - Truncated preview.
|
|
13
|
+
*/
|
|
14
|
+
function truncatePreview(input, limit = 300) {
|
|
15
|
+
if (typeof input !== "string")
|
|
16
|
+
return undefined;
|
|
17
|
+
if (input.length <= limit)
|
|
18
|
+
return input;
|
|
19
|
+
return `${input.slice(0, limit)}...`;
|
|
20
|
+
}
|
|
9
21
|
export default class RequestBuffer {
|
|
10
22
|
bodyLength = 0;
|
|
11
23
|
/** @type {number[]} */
|
|
@@ -389,12 +401,29 @@ export default class RequestBuffer {
|
|
|
389
401
|
}
|
|
390
402
|
parseQueryStringPostParams() {
|
|
391
403
|
if (this.postBody) {
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
404
|
+
try {
|
|
405
|
+
/** @type {Record<string, string | string[]>} */
|
|
406
|
+
const unparsedParams = querystring.parse(this.postBody);
|
|
407
|
+
const paramsToObject = new ParamsToObject(unparsedParams);
|
|
408
|
+
const newParams = paramsToObject.toObject();
|
|
409
|
+
incorporate(this.params, newParams);
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
const ensuredError = /** @type {Error & {velociousContext?: Record<string, unknown>}} */ (error);
|
|
413
|
+
ensuredError.velociousContext = {
|
|
414
|
+
...(ensuredError.velociousContext || {}),
|
|
415
|
+
requestParsing: {
|
|
416
|
+
contentType: this.getHeader("content-type")?.value,
|
|
417
|
+
httpMethod: this.httpMethod,
|
|
418
|
+
parameterKeys: Object.keys(querystring.parse(this.postBody)),
|
|
419
|
+
path: this.path,
|
|
420
|
+
postBodyPreview: truncatePreview(this.postBody),
|
|
421
|
+
stage: "query-string-post-params"
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
throw ensuredError;
|
|
425
|
+
}
|
|
397
426
|
}
|
|
398
427
|
}
|
|
399
428
|
}
|
|
400
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QtYnVmZmVyL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFlBQVksTUFBTSxpQ0FBaUMsQ0FBQTtBQUMxRCxPQUFPLFlBQVksTUFBTSxxQkFBcUIsQ0FBQTtBQUM5QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN4QyxPQUFPLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQTtBQUN2QyxPQUFPLGNBQWMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNuRCxPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUE7QUFFckMsTUFBTSxDQUFDLE9BQU8sT0FBTyxhQUFhO0lBQ2hDLFVBQVUsR0FBRyxDQUFDLENBQUE7SUFFZCx1QkFBdUI7SUFDdkIsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUVULE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO0lBRTNCLHFDQUFxQztJQUNyQyxhQUFhLEdBQUcsRUFBRSxDQUFBO0lBRWxCLGtCQUFrQixHQUFHLEtBQUssQ0FBQTtJQUUxQixTQUFTLEdBQUcsS0FBSyxDQUFBO0lBQ2pCLE1BQU0sR0FBRyxFQUFFLENBQUE7SUFDWCxXQUFXLEdBQUcsS0FBSyxDQUFBO0lBQ25CLEtBQUssR0FBRyxRQUFRLENBQUE7SUFFaEI7OztPQUdHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFRCxPQUFPO1FBQ0wsd0JBQXdCO0lBQzFCLENBQUM7SUFFRDs7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LEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7WUFFM0MsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsZ0RBQWdEO1lBQ2hELE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3ZELE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQ3pELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtZQUUzQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUNyQyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2V2ZW50LWVtaXR0ZXIuanNcIlxuaW1wb3J0IEZvcm1EYXRhUGFydCBmcm9tIFwiLi9mb3JtLWRhdGEtcGFydC5qc1wiXG5pbXBvcnQgSGVhZGVyIGZyb20gXCIuL2hlYWRlci5qc1wiXG5pbXBvcnQge2luY29ycG9yYXRlfSBmcm9tIFwiaW5jb3Jwb3JhdG9yXCJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgUGFyYW1zVG9PYmplY3QgZnJvbSBcIi4uL3BhcmFtcy10by1vYmplY3QuanNcIlxuaW1wb3J0IHF1ZXJ5c3RyaW5nIGZyb20gXCJxdWVyeXN0cmluZ1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcXVlc3RCdWZmZXIge1xuICBib2R5TGVuZ3RoID0gMFxuXG4gIC8qKiBAdHlwZSB7bnVtYmVyW119ICovXG4gIGRhdGEgPSBbXVxuXG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgSGVhZGVyPn0gKi9cbiAgaGVhZGVyc0J5TmFtZSA9IHt9XG5cbiAgbXVsdGlQYXJ0eUZvcm1EYXRhID0gZmFsc2VcblxuICBjb21wbGV0ZWQgPSBmYWxzZVxuICBwYXJhbXMgPSB7fVxuICByZWFkaW5nQm9keSA9IGZhbHNlXG4gIHN0YXRlID0gXCJzdGF0dXNcIlxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9ufSkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcywge2RlYnVnOiBmYWxzZX0pXG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vdy4uLlxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIC0gRGF0YSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7QnVmZmVyIHwgdW5kZWZpbmVkfSAtIFJlbWFpbmluZyBkYXRhLCBpZiBhbnkuXG4gICAqL1xuICBmZWVkKGRhdGEpIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IGNoYXIgPSBkYXRhW2luZGV4XVxuXG4gICAgICBpZiAodGhpcy5yZWFkaW5nQm9keSkgdGhpcy5ib2R5TGVuZ3RoICs9IDFcblxuICAgICAgc3dpdGNoKHRoaXMuc3RhdGUpIHtcbiAgICAgICAgY2FzZSBcInN0YXR1c1wiOlxuICAgICAgICBjYXNlIFwiaGVhZGVyc1wiOlxuICAgICAgICBjYXNlIFwibXVsdGktcGFydC1mb3JtLWRhdGFcIjpcbiAgICAgICAgY2FzZSBcIm11bHRpLXBhcnQtZm9ybS1kYXRhLWhlYWRlclwiOlxuICAgICAgICBjYXNlIFwiY2h1bmtlZC1zaXplXCI6XG4gICAgICAgIGNhc2UgXCJjaHVua2VkLXRyYWlsZXJcIjpcbiAgICAgICAgICB0aGlzLmRhdGEucHVzaChjaGFyKVxuXG4gICAgICAgICAgaWYgKGNoYXIgPT0gMTApIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHRoaXMuZGF0YSlcblxuICAgICAgICAgICAgdGhpcy5kYXRhID0gW11cbiAgICAgICAgICAgIHRoaXMucGFyc2UobGluZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIFwiY2h1bmtlZC1kYXRhXCI6XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudENodW5rU2l6ZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoXCJDaHVuayBzaXplIG5vdCBpbml0aWFsaXplZFwiKVxuICAgICAgICAgIGlmICghdGhpcy5jaHVua2VkQm9keUNoYXJzKSB0aHJvdyBuZXcgRXJyb3IoXCJDaHVua2VkIGJvZHkgbm90IGluaXRpYWxpemVkXCIpXG5cbiAgICAgICAgICB0aGlzLmNodW5rZWRCb2R5Q2hhcnMucHVzaChjaGFyKVxuICAgICAgICAgIHRoaXMuY3VycmVudENodW5rQnl0ZXNSZWFkICs9IDFcblxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaHVua0J5dGVzUmVhZCA+PSB0aGlzLmN1cnJlbnRDaHVua1NpemUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENodW5rQ3JsZlJlYWQgPSAwXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKFwiY2h1bmtlZC1kYXRhLWNybGZcIilcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIFwiY2h1bmtlZC1kYXRhLWNybGZcIjpcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDaHVua0NybGZSZWFkID0gKHRoaXMuY3VycmVudENodW5rQ3JsZlJlYWQgfHwgMCkgKyAxXG5cbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2h1bmtDcmxmUmVhZCA+PSAyKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaHVua0J5dGVzUmVhZCA9IDBcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXCJjaHVua2VkLXNpemVcIilcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIFwibXVsdGktcGFydC1mb3JtLWRhdGEtYm9keVwiOlxuICAgICAgICAgIGlmICghdGhpcy5mb3JtRGF0YVBhcnQpIHRocm93IG5ldyBFcnJvcihcIkZvcm1EYXRhIHBhcnQgbm90IGluaXRpYWxpemVkXCIpXG4gICAgICAgICAgaWYgKCF0aGlzLmJvdW5kYXJ5TGluZUVuZCkgdGhyb3cgbmV3IEVycm9yKFwiQm91bmRhcnkgbGluZSBlbmQgbm90IGluaXRpYWxpemVkXCIpXG4gICAgICAgICAgaWYgKCF0aGlzLmJvdW5kYXJ5TGluZU5leHQpIHRocm93IG5ldyBFcnJvcihcIkJvdW5kYXJ5IGxpbmUgbmV4dCBub3QgaW5pdGlhbGl6ZWRcIilcblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmZvcm1EYXRhUGFydC5ib2R5IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY2FzZS1kZWNsYXJhdGlvbnNcblxuICAgICAgICAgIGJvZHkucHVzaChjaGFyKVxuXG4gICAgICAgICAgY29uc3QgcG9zc2libGVCb3VuZGFyeUVuZFBvc2l0aW9uID0gYm9keS5sZW5ndGggLSB0aGlzLmJvdW5kYXJ5TGluZUVuZC5sZW5ndGggLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xuICAgICAgICAgIGNvbnN0IHBvc3NpYmxlQm91bmRhcnlFbmRDaGFycyA9IGJvZHkuc2xpY2UocG9zc2libGVCb3VuZGFyeUVuZFBvc2l0aW9uLCBib2R5Lmxlbmd0aCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xuICAgICAgICAgIGNvbnN0IHBvc3NpYmxlQm91bmRhcnlFbmQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHBvc3NpYmxlQm91bmRhcnlFbmRDaGFycykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xuXG4gICAgICAgICAgY29uc3QgcG9zc2libGVCb3VuZGFyeU5leHRQb3NpdGlvbiA9IGJvZHkubGVuZ3RoIC0gdGhpcy5ib3VuZGFyeUxpbmVOZXh0Lmxlbmd0aCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgY29uc3QgcG9zc2libGVCb3VuZGFyeU5leHRDaGFycyA9IGJvZHkuc2xpY2UocG9zc2libGVCb3VuZGFyeU5leHRQb3NpdGlvbiwgYm9keS5sZW5ndGgpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY2FzZS1kZWNsYXJhdGlvbnNcbiAgICAgICAgICBjb25zdCBwb3NzaWJsZUJvdW5kYXJ5TmV4dCA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgcG9zc2libGVCb3VuZGFyeU5leHRDaGFycykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xuXG4gICAgICAgICAgaWYgKHBvc3NpYmxlQm91bmRhcnlFbmQgPT0gdGhpcy5ib3VuZGFyeUxpbmVFbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGFQYXJ0LnJlbW92ZUZyb21Cb2R5KHBvc3NpYmxlQm91bmRhcnlFbmQpXG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhUGFydERvbmUoKVxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVJlcXVlc3QoKVxuICAgICAgICAgIH0gZWxzZSBpZiAocG9zc2libGVCb3VuZGFyeU5leHQgPT0gdGhpcy5ib3VuZGFyeUxpbmVOZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhUGFydC5yZW1vdmVGcm9tQm9keShwb3NzaWJsZUJvdW5kYXJ5TmV4dClcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGFQYXJ0RG9uZSgpXG4gICAgICAgICAgICB0aGlzLm5ld0Zvcm1EYXRhUGFydCgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRlbnRMZW5ndGggJiYgdGhpcy5ib2R5TGVuZ3RoID49IHRoaXMuY29udGVudExlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YVBhcnREb25lKClcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVSZXF1ZXN0KClcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybURhdGFQYXJ0LmNvbnRlbnRMZW5ndGggJiYgdGhpcy5ib2R5TGVuZ3RoID49IHRoaXMuZm9ybURhdGFQYXJ0LmNvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGFQYXJ0RG9uZSgpXG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInN0dWJcIilcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIFwicG9zdC1ib2R5XCI6XG4gICAgICAgICAgaWYgKCF0aGlzLnBvc3RCb2R5Q2hhcnMpIHRocm93IG5ldyBFcnJvcihcInBvc3RCb2R5Q2hhcnMgbm90IGluaXRpYWxpemVkXCIpXG5cbiAgICAgICAgICB0aGlzLnBvc3RCb2R5Q2hhcnNbdGhpcy5ib2R5TGVuZ3RoIC0gMV0gPSBjaGFyXG5cbiAgICAgICAgICBpZiAodGhpcy5jb250ZW50TGVuZ3RoICYmIHRoaXMuYm9keUxlbmd0aCA+PSB0aGlzLmNvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucG9zdFJlcXVlc3REb25lKClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCgpID0+IFtgVW5rbm93biBzdGF0ZSBmb3IgcmVxdWVzdCBidWZmZXJgLCB7c3RhdGU6IHRoaXMuc3RhdGV9XSlcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVybiBkYXRhLnN1YmFycmF5KGluZGV4ICsgMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcmV0dXJucyB7SGVhZGVyfSAtIFRoZSBoZWFkZXIuXG4gICAqL1xuICBnZXRIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaGVhZGVyc0J5TmFtZVtuYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpXVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWdMb3dMZXZlbCgoKSA9PiBbYGdldEhlYWRlciAke25hbWV9YCwge3Jlc3VsdDogcmVzdWx0Py50b1N0cmluZygpfV0pXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gVGhlIGhlYWRlcnMgaGFzaC5cbiAgICovXG4gIGdldEhlYWRlcnNIYXNoKCkge1xuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBjb25zdCByZXN1bHQgPSB7fVxuXG4gICAgZm9yIChjb25zdCBoZWFkZXJGb3JtYXR0ZWROYW1lIGluIHRoaXMuaGVhZGVyc0J5TmFtZSkge1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5oZWFkZXJzQnlOYW1lW2hlYWRlckZvcm1hdHRlZE5hbWVdXG5cbiAgICAgIHJlc3VsdFtoZWFkZXIuZ2V0TmFtZSgpXSA9IGhlYWRlci5nZXRWYWx1ZSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGZvcm1EYXRhUGFydERvbmUoKSB7XG4gICAgY29uc3QgZm9ybURhdGFQYXJ0ID0gdGhpcy5mb3JtRGF0YVBhcnRcblxuICAgIGlmICghZm9ybURhdGFQYXJ0KSB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtRGF0YVBhcnQgd2FzbnQgc2V0XCIpXG5cbiAgICB0aGlzLmZvcm1EYXRhUGFydCA9IHVuZGVmaW5lZFxuICAgIGZvcm1EYXRhUGFydC5maW5pc2goKVxuXG4gICAgdGhpcy5ldmVudHMuZW1pdChcImZvcm0tZGF0YS1wYXJ0XCIsIGZvcm1EYXRhUGFydClcbiAgfVxuXG4gIGlzTXVsdGlQYXJ0eUZvcm1EYXRhKCkge1xuICAgIHJldHVybiB0aGlzLm11bHRpUGFydHlGb3JtRGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG5ld0Zvcm1EYXRhUGFydCgpIHtcbiAgICB0aGlzLmZvcm1EYXRhUGFydCA9IG5ldyBGb3JtRGF0YVBhcnQoKVxuICAgIHRoaXMuc2V0U3RhdGUoXCJtdWx0aS1wYXJ0LWZvcm0tZGF0YS1oZWFkZXJcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGluZSAtIExpbmUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHBhcnNlKGxpbmUpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PSBcInN0YXR1c1wiKSB7XG4gICAgICB0aGlzLnBhcnNlU3RhdHVzTGluZShsaW5lKVxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PSBcImhlYWRlcnNcIikge1xuICAgICAgdGhpcy5wYXJzZUhlYWRlcihsaW5lKVxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PSBcImNodW5rZWQtc2l6ZVwiKSB7XG4gICAgICB0aGlzLnBhcnNlQ2h1bmtTaXplTGluZShsaW5lKVxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PSBcImNodW5rZWQtdHJhaWxlclwiKSB7XG4gICAgICBpZiAobGluZSA9PSBcIlxcclxcblwiKSB7XG4gICAgICAgIHRoaXMuZmluaXNoQ2h1bmtlZEJvZHkoKVxuICAgICAgICB0aGlzLmNvbXBsZXRlUmVxdWVzdCgpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09IFwibXVsdGktcGFydC1mb3JtLWRhdGFcIikge1xuICAgICAgaWYgKGxpbmUgPT0gdGhpcy5ib3VuZGFyeUxpbmUpIHtcbiAgICAgICAgdGhpcy5uZXdGb3JtRGF0YVBhcnQoKVxuICAgICAgfSBlbHNlIGlmIChsaW5lID09IFwiXFxyXFxuXCIpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcImRvbmVcIilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYm91bmRhcnkgbGluZSBidXQgZGlkbid0IGdldCBpdDogJHtsaW5lfWApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09IFwibXVsdGktcGFydC1mb3JtLWRhdGEtaGVhZGVyXCIpIHtcbiAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVhZEhlYWRlckZyb21MaW5lKGxpbmUpXG5cbiAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1EYXRhUGFydCkgdGhyb3cgbmV3IEVycm9yKFwiZm9ybURhdGFQYXJ0IG5vdCBzZXRcIilcblxuICAgICAgICB0aGlzLmZvcm1EYXRhUGFydC5hZGRIZWFkZXIoaGVhZGVyKVxuICAgICAgICAvL3RoaXMuc3RhdGUgPT0gXCJtdWx0aS1wYXJ0LWZvcm0tZGF0YVwiXG4gICAgICB9IGVsc2UgaWYgKGxpbmUgPT0gXCJcXHJcXG5cIikge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFwibXVsdGktcGFydC1mb3JtLWRhdGEtYm9keVwiKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3RhdGUgcGFyc2luZyBsaW5lOiAke3RoaXMuc3RhdGV9YClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpbmUgLSBMaW5lLlxuICAgKiBAcmV0dXJucyB7SGVhZGVyIHwgdW5kZWZpbmVkfSAtIFRoZSBoZWFkZXIgZnJvbSBsaW5lLlxuICAgKi9cbiAgcmVhZEhlYWRlckZyb21MaW5lKGxpbmUpIHtcbiAgICBjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2goL14oLispOiAoLispXFxyXFxuLylcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgY29uc3QgaGVhZGVyID0gbmV3IEhlYWRlcihtYXRjaFsxXSwgbWF0Y2hbMl0pXG5cbiAgICAgIHJldHVybiBoZWFkZXJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIZWFkZXJ9IGhlYWRlciAtIEhlYWRlciB2YWx1ZS5cbiAgICovXG4gIGFkZEhlYWRlcihoZWFkZXIpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWROYW1lID0gaGVhZGVyLmdldEZvcm1hdHRlZE5hbWUoKVxuXG4gICAgdGhpcy5oZWFkZXJzQnlOYW1lW2Zvcm1hdHRlZE5hbWVdID0gaGVhZGVyXG5cbiAgICBpZiAoZm9ybWF0dGVkTmFtZSA9PSBcImNvbnRlbnQtbGVuZ3RoXCIpIHRoaXMuY29udGVudExlbmd0aCA9IHBhcnNlSW50KGhlYWRlci5nZXRWYWx1ZSgpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaW5lIC0gTGluZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgcGFyc2VIZWFkZXIobGluZSkge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVhZEhlYWRlckZyb21MaW5lKGxpbmUpXG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1Z0xvd0xldmVsKCgpID0+IGBQYXJzZWQgaGVhZGVyOiAke2hlYWRlci50b1N0cmluZygpfWApXG4gICAgICB0aGlzLmFkZEhlYWRlcihoZWFkZXIpXG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KFwiaGVhZGVyXCIsIGhlYWRlcilcbiAgICB9IGVsc2UgaWYgKGxpbmUgPT0gXCJcXHJcXG5cIikge1xuICAgICAgY29uc3QgaHR0cE1ldGhvZCA9IHRoaXMuaHR0cE1ldGhvZD8udG9VcHBlckNhc2UoKVxuXG4gICAgICBpZiAoIWh0dHBNZXRob2QpIHRocm93IG5ldyBFcnJvcihcIkhUVFAgbWV0aG9kIG5vdCBzZXRcIilcblxuICAgICAgaWYgKCF0aGlzLmV4cGVjdHNSZXF1ZXN0Qm9keShodHRwTWV0aG9kKSkge1xuICAgICAgICB0aGlzLmNvbXBsZXRlUmVxdWVzdCgpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDaHVua2VkRW5jb2RpbmcoKSkge1xuICAgICAgICB0aGlzLnJlYWRpbmdCb2R5ID0gdHJ1ZVxuICAgICAgICB0aGlzLmJvZHlMZW5ndGggPSAwXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNodW5rZWRCb2R5KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVhZGluZ0JvZHkgPSB0cnVlXG4gICAgICAgIHRoaXMuYm9keUxlbmd0aCA9IDBcblxuICAgICAgICBjb25zdCBtYXRjaCA9IHRoaXMuZ2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIpPy52YWx1ZT8ubWF0Y2goL15tdWx0aXBhcnRcXC9mb3JtLWRhdGE7XFxzKmJvdW5kYXJ5PSguKykkL2kpXG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdGhpcy5ib3VuZGFyeSA9IG1hdGNoWzFdXG4gICAgICAgICAgdGhpcy5ib3VuZGFyeUxpbmUgPSBgLS0ke3RoaXMuYm91bmRhcnl9XFxyXFxuYFxuICAgICAgICAgIHRoaXMuYm91bmRhcnlMaW5lTmV4dCA9IGBcXHJcXG4tLSR7dGhpcy5ib3VuZGFyeX1cXHJcXG5gXG4gICAgICAgICAgdGhpcy5ib3VuZGFyeUxpbmVFbmQgPSBgXFxyXFxuLS0ke3RoaXMuYm91bmRhcnl9LS1gXG4gICAgICAgICAgdGhpcy5tdWx0aVBhcnR5Rm9ybURhdGEgPSB0cnVlXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShcIm11bHRpLXBhcnQtZm9ybS1kYXRhXCIpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb250ZW50TGVuZ3RoID09PSAwIHx8IHRoaXMuY29udGVudExlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZVJlcXVlc3QoKVxuICAgICAgICB9IGVsc2UgaWYgKE51bWJlci5pc05hTih0aGlzLmNvbnRlbnRMZW5ndGgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udGVudCBsZW5ndGggaXMgaW52YWxpZFwiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyW119ICovXG4gICAgICAgICAgdGhpcy5wb3N0Qm9keUNoYXJzID0gW11cblxuICAgICAgICAgIC8vIHRoaXMucG9zdEJvZHlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy5jb250ZW50TGVuZ3RoKVxuICAgICAgICAgIC8vIHRoaXMucG9zdEJvZHlDaGFycyA9IG5ldyBVaW50OEFycmF5KHRoaXMucG9zdEJvZHlCdWZmZXIpXG5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKFwicG9zdC1ib2R5XCIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpbmUgLSBMaW5lLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBwYXJzZVN0YXR1c0xpbmUobGluZSkge1xuICAgIGNvbnN0IG1hdGNoID0gbGluZS5tYXRjaCgvXihbQS1aLV0rKSAoLis/KSBIVFRQXFwvKC4rKVxcclxcbi8pXG5cbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IG1hdGNoIHN0YXR1cyBsaW5lIGZyb206ICR7bGluZX1gKVxuICAgIH1cblxuICAgIHRoaXMuaHR0cE1ldGhvZCA9IG1hdGNoWzFdXG4gICAgdGhpcy5odHRwVmVyc2lvbiA9IG1hdGNoWzNdXG4gICAgdGhpcy5wYXRoID0gbWF0Y2hbMl1cbiAgICB0aGlzLnNldFN0YXRlKFwiaGVhZGVyc1wiKVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gW1wiUGFyc2VkIHN0YXR1cyBsaW5lXCIsIHtodHRwTWV0aG9kOiB0aGlzLmh0dHBNZXRob2QsIGh0dHBWZXJzaW9uOiB0aGlzLmh0dHBWZXJzaW9uLCBwYXRoOiB0aGlzLnBhdGh9XSlcbiAgfVxuXG4gIHBvc3RSZXF1ZXN0RG9uZSgpIHtcbiAgICBpZiAodGhpcy5wb3N0Qm9keUNoYXJzKSB7XG4gICAgICB0aGlzLnBvc3RCb2R5ID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCB0aGlzLnBvc3RCb2R5Q2hhcnMpXG4gICAgfVxuXG4gICAgZGVsZXRlIHRoaXMucG9zdEJvZHlDaGFyc1xuICAgIC8vIGRlbGV0ZSB0aGlzLnBvc3RCb2R5QnVmZmVyXG5cbiAgICB0aGlzLmNvbXBsZXRlUmVxdWVzdCgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGh0dHBNZXRob2QgLSBIVFRQIG1ldGhvZC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGUgcmVxdWVzdCBleHBlY3RzIGEgYm9keS5cbiAgICovXG4gIGV4cGVjdHNSZXF1ZXN0Qm9keShodHRwTWV0aG9kKSB7XG4gICAgcmV0dXJuICFbXCJHRVRcIiwgXCJPUFRJT05TXCIsIFwiSEVBRFwiXS5pbmNsdWRlcyhodHRwTWV0aG9kKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIHJlcXVlc3QgdXNlcyBjaHVua2VkIHRyYW5zZmVyIGVuY29kaW5nLlxuICAgKi9cbiAgaXNDaHVua2VkRW5jb2RpbmcoKSB7XG4gICAgY29uc3QgdHJhbnNmZXJFbmNvZGluZyA9IHRoaXMuZ2V0SGVhZGVyKFwidHJhbnNmZXItZW5jb2RpbmdcIik/LnZhbHVlPy50b0xvd2VyQ2FzZSgpXG5cbiAgICByZXR1cm4gQm9vbGVhbih0cmFuc2ZlckVuY29kaW5nPy5pbmNsdWRlcyhcImNodW5rZWRcIikpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgaW5pdGlhbGl6ZUNodW5rZWRCb2R5KCkge1xuICAgIHRoaXMuY2h1bmtlZEJvZHlDaGFycyA9IFtdXG4gICAgdGhpcy5jdXJyZW50Q2h1bmtTaXplID0gdW5kZWZpbmVkXG4gICAgdGhpcy5jdXJyZW50Q2h1bmtCeXRlc1JlYWQgPSAwXG4gICAgdGhpcy5zZXRTdGF0ZShcImNodW5rZWQtc2l6ZVwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaW5lIC0gQ2h1bmsgc2l6ZSBsaW5lLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBwYXJzZUNodW5rU2l6ZUxpbmUobGluZSkge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKVxuXG4gICAgaWYgKCF0cmltbWVkKSByZXR1cm5cblxuICAgIGNvbnN0IHNpemVUb2tlbiA9IHRyaW1tZWQuc3BsaXQoXCI7XCIpWzBdPy50cmltKClcblxuICAgIGlmICghc2l6ZVRva2VuKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2h1bmsgc2l6ZSBsaW5lOiAke2xpbmV9YClcblxuICAgIGNvbnN0IHNpemUgPSBOdW1iZXIucGFyc2VJbnQoc2l6ZVRva2VuLCAxNilcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNpemUpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2h1bmsgc2l6ZTogJHtzaXplVG9rZW59YClcblxuICAgIGlmIChzaXplID09PSAwKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFwiY2h1bmtlZC10cmFpbGVyXCIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRDaHVua1NpemUgPSBzaXplXG4gICAgdGhpcy5jdXJyZW50Q2h1bmtCeXRlc1JlYWQgPSAwXG4gICAgdGhpcy5zZXRTdGF0ZShcImNodW5rZWQtZGF0YVwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGZpbmlzaENodW5rZWRCb2R5KCkge1xuICAgIGlmICh0aGlzLmNodW5rZWRCb2R5Q2hhcnMpIHtcbiAgICAgIHRoaXMucG9zdEJvZHkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHRoaXMuY2h1bmtlZEJvZHlDaGFycylcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5jaHVua2VkQm9keUNoYXJzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1N0YXRlIC0gTmV3IHN0YXRlLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gYENoYW5naW5nIHN0YXRlIGZyb20gJHt0aGlzLnN0YXRlfSB0byAke25ld1N0YXRlfWApXG4gICAgdGhpcy5zdGF0ZSA9IG5ld1N0YXRlXG4gIH1cblxuICBjb21wbGV0ZVJlcXVlc3QgPSAoKSA9PiB7XG4gICAgdGhpcy5zdGF0ZSA9IFwic3RhdHVzXCIgLy8gUmVzZXQgc3RhdGUgdG8gbmV3IHJlcXVlc3RcbiAgICB0aGlzLmNvbXBsZXRlZCA9IHRydWVcblxuICAgIGlmICh0aGlzLmdldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiKT8udmFsdWU/LnN0YXJ0c1dpdGgoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSB7XG4gICAgICB0aGlzLnBhcnNlQXBwbGljYXRpb25Kc29uUGFyYW1zKClcbiAgICB9IGVsc2UgaWYgKHRoaXMubXVsdGlQYXJ0eUZvcm1EYXRhKSB7XG4gICAgICAvLyBEb25lIGFmdGVyIGVhY2ggbmV3IGZvcm0gZGF0YSBwYXJ0XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyc2VRdWVyeVN0cmluZ1Bvc3RQYXJhbXMoKVxuICAgIH1cblxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJjb21wbGV0ZWRcIilcbiAgfVxuXG4gIHBhcnNlQXBwbGljYXRpb25Kc29uUGFyYW1zKCkge1xuICAgIGlmICh0aGlzLnBvc3RCb2R5KSB7XG4gICAgICBjb25zdCBuZXdQYXJhbXMgPSBKU09OLnBhcnNlKHRoaXMucG9zdEJvZHkpXG5cbiAgICAgIGluY29ycG9yYXRlKHRoaXMucGFyYW1zLCBuZXdQYXJhbXMpXG4gICAgfVxuICB9XG5cbiAgcGFyc2VRdWVyeVN0cmluZ1Bvc3RQYXJhbXMoKSB7XG4gICAgaWYgKHRoaXMucG9zdEJvZHkpIHtcbiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+fSAqL1xuICAgICAgY29uc3QgdW5wYXJzZWRQYXJhbXMgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnBvc3RCb2R5KVxuICAgICAgY29uc3QgcGFyYW1zVG9PYmplY3QgPSBuZXcgUGFyYW1zVG9PYmplY3QodW5wYXJzZWRQYXJhbXMpXG4gICAgICBjb25zdCBuZXdQYXJhbXMgPSBwYXJhbXNUb09iamVjdC50b09iamVjdCgpXG5cbiAgICAgIGluY29ycG9yYXRlKHRoaXMucGFyYW1zLCBuZXdQYXJhbXMpXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
429
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QtYnVmZmVyL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFlBQVksTUFBTSxpQ0FBaUMsQ0FBQTtBQUMxRCxPQUFPLFlBQVksTUFBTSxxQkFBcUIsQ0FBQTtBQUM5QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN4QyxPQUFPLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQTtBQUN2QyxPQUFPLGNBQWMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNuRCxPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUE7QUFFckM7Ozs7R0FJRztBQUNILFNBQVMsZUFBZSxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsR0FBRztJQUN6QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUMvQyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRXZDLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFBO0FBQ3RDLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLGFBQWE7SUFDaEMsVUFBVSxHQUFHLENBQUMsQ0FBQTtJQUVkLHVCQUF1QjtJQUN2QixJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRVQsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7SUFFM0IscUNBQXFDO0lBQ3JDLGFBQWEsR0FBRyxFQUFFLENBQUE7SUFFbEIsa0JBQWtCLEdBQUcsS0FBSyxDQUFBO0lBRTFCLFNBQVMsR0FBRyxLQUFLLENBQUE7SUFDakIsTUFBTSxHQUFHLEVBQUUsQ0FBQTtJQUNYLFdBQVcsR0FBRyxLQUFL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d0JBQ2xELFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTt3QkFDM0IsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzVELElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDZixlQUFlLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7d0JBQy9DLEtBQUssRUFBRSwwQkFBMEI7cUJBQ2xDO2lCQUNGLENBQUE7Z0JBRUQsTUFBTSxZQUFZLENBQUE7WUFDcEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZXZlbnQtZW1pdHRlci5qc1wiXG5pbXBvcnQgRm9ybURhdGFQYXJ0IGZyb20gXCIuL2Zvcm0tZGF0YS1wYXJ0LmpzXCJcbmltcG9ydCBIZWFkZXIgZnJvbSBcIi4vaGVhZGVyLmpzXCJcbmltcG9ydCB7aW5jb3Jwb3JhdGV9IGZyb20gXCJpbmNvcnBvcmF0b3JcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBQYXJhbXNUb09iamVjdCBmcm9tIFwiLi4vcGFyYW1zLXRvLW9iamVjdC5qc1wiXG5pbXBvcnQgcXVlcnlzdHJpbmcgZnJvbSBcInF1ZXJ5c3RyaW5nXCJcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gaW5wdXQgLSBJbnB1dCBzdHJpbmcuXG4gKiBAcGFyYW0ge251bWJlcn0gW2xpbWl0XSAtIE1heCBwcmV2aWV3IGxlbmd0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVHJ1bmNhdGVkIHByZXZpZXcuXG4gKi9cbmZ1bmN0aW9uIHRydW5jYXRlUHJldmlldyhpbnB1dCwgbGltaXQgPSAzMDApIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAoaW5wdXQubGVuZ3RoIDw9IGxpbWl0KSByZXR1cm4gaW5wdXRcblxuICByZXR1cm4gYCR7aW5wdXQuc2xpY2UoMCwgbGltaXQpfS4uLmBcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVxdWVzdEJ1ZmZlciB7XG4gIGJvZHlMZW5ndGggPSAwXG5cbiAgLyoqIEB0eXBlIHtudW1iZXJbXX0gKi9cbiAgZGF0YSA9IFtdXG5cbiAgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBIZWFkZXI+fSAqL1xuICBoZWFkZXJzQnlOYW1lID0ge31cblxuICBtdWx0aVBhcnR5Rm9ybURhdGEgPSBmYWxzZVxuXG4gIGNvbXBsZXRlZCA9IGZhbHNlXG4gIHBhcmFtcyA9IHt9XG4gIHJlYWRpbmdCb2R5ID0gZmFsc2VcbiAgc3RhdGUgPSBcInN0YXR1c1wiXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb259KSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzLCB7ZGVidWc6IGZhbHNlfSlcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgLy8gRG8gbm90aGluZyBmb3Igbm93Li4uXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtCdWZmZXIgfCB1bmRlZmluZWR9IC0gUmVtYWluaW5nIGRhdGEsIGlmIGFueS5cbiAgICovXG4gIGZlZWQoZGF0YSkge1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgY29uc3QgY2hhciA9IGRhdGFbaW5kZXhdXG5cbiAgICAgIGlmICh0aGlzLnJlYWRpbmdCb2R5KSB0aGlzLmJvZHlMZW5ndGggKz0gMVxuXG4gICAgICBzd2l0Y2godGhpcy5zdGF0ZSkge1xuICAgICAgICBjYXNlIFwic3RhdHVzXCI6XG4gICAgICAgIGNhc2UgXCJoZWFkZXJzXCI6XG4gICAgICAgIGNhc2UgXCJtdWx0aS1wYXJ0LWZvcm0tZGF0YVwiOlxuICAgICAgICBjYXNlIFwibXVsdGktcGFydC1mb3JtLWRhdGEtaGVhZGVyXCI6XG4gICAgICAgIGNhc2UgXCJjaHVua2VkLXNpemVcIjpcbiAgICAgICAgY2FzZSBcImNodW5rZWQtdHJhaWxlclwiOlxuICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKGNoYXIpXG5cbiAgICAgICAgICBpZiAoY2hhciA9PSAxMCkge1xuICAgICAgICAgICAgY29uc3QgbGluZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgdGhpcy5kYXRhKVxuXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBbXVxuICAgICAgICAgICAgdGhpcy5wYXJzZShsaW5lKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgXCJjaHVua2VkLWRhdGFcIjpcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2h1bmtTaXplID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihcIkNodW5rIHNpemUgbm90IGluaXRpYWxpemVkXCIpXG4gICAgICAgICAgaWYgKCF0aGlzLmNodW5rZWRCb2R5Q2hhcnMpIHRocm93IG5ldyBFcnJvcihcIkNodW5rZWQgYm9keSBub3QgaW5pdGlhbGl6ZWRcIilcblxuICAgICAgICAgIHRoaXMuY2h1bmtlZEJvZHlDaGFycy5wdXNoKGNoYXIpXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2h1bmtCeXRlc1JlYWQgKz0gMVxuXG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudENodW5rQnl0ZXNSZWFkID49IHRoaXMuY3VycmVudENodW5rU2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2h1bmtDcmxmUmVhZCA9IDBcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXCJjaHVua2VkLWRhdGEtY3JsZlwiKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgXCJjaHVua2VkLWRhdGEtY3JsZlwiOlxuICAgICAgICAgIHRoaXMuY3VycmVudENodW5rQ3JsZlJlYWQgPSAodGhpcy5jdXJyZW50Q2h1bmtDcmxmUmVhZCB8fCAwKSArIDFcblxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaHVua0NybGZSZWFkID49IDIpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENodW5rQnl0ZXNSZWFkID0gMFxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShcImNodW5rZWQtc2l6ZVwiKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgXCJtdWx0aS1wYXJ0LWZvcm0tZGF0YS1ib2R5XCI6XG4gICAgICAgICAgaWYgKCF0aGlzLmZvcm1EYXRhUGFydCkgdGhyb3cgbmV3IEVycm9yKFwiRm9ybURhdGEgcGFydCBub3QgaW5pdGlhbGl6ZWRcIilcbiAgICAgICAgICBpZiAoIXRoaXMuYm91bmRhcnlMaW5lRW5kKSB0aHJvdyBuZXcgRXJyb3IoXCJCb3VuZGFyeSBsaW5lIGVuZCBub3QgaW5pdGlhbGl6ZWRcIilcbiAgICAgICAgICBpZiAoIXRoaXMuYm91bmRhcnlMaW5lTmV4dCkgdGhyb3cgbmV3IEVycm9yKFwiQm91bmRhcnkgbGluZSBuZXh0IG5vdCBpbml0aWFsaXplZFwiKVxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuZm9ybURhdGFQYXJ0LmJvZHkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xuXG4gICAgICAgICAgYm9keS5wdXNoKGNoYXIpXG5cbiAgICAgICAgICBjb25zdCBwb3NzaWJsZUJvdW5kYXJ5RW5kUG9zaXRpb24gPSBib2R5Lmxlbmd0aCAtIHRoaXMuYm91bmRhcnlMaW5lRW5kLmxlbmd0aCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgY29uc3QgcG9zc2libGVCb3VuZGFyeUVuZENoYXJzID0gYm9keS5zbGljZShwb3NzaWJsZUJvdW5kYXJ5RW5kUG9zaXRpb24sIGJvZHkubGVuZ3RoKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgY29uc3QgcG9zc2libGVCb3VuZGFyeUVuZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgcG9zc2libGVCb3VuZGFyeUVuZENoYXJzKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG5cbiAgICAgICAgICBjb25zdCBwb3NzaWJsZUJvdW5kYXJ5TmV4dFBvc2l0aW9uID0gYm9keS5sZW5ndGggLSB0aGlzLmJvdW5kYXJ5TGluZU5leHQubGVuZ3RoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY2FzZS1kZWNsYXJhdGlvbnNcbiAgICAgICAgICBjb25zdCBwb3NzaWJsZUJvdW5kYXJ5TmV4dENoYXJzID0gYm9keS5zbGljZShwb3NzaWJsZUJvdW5kYXJ5TmV4dFBvc2l0aW9uLCBib2R5Lmxlbmd0aCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xuICAgICAgICAgIGNvbnN0IHBvc3NpYmxlQm91bmRhcnlOZXh0ID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBwb3NzaWJsZUJvdW5kYXJ5TmV4dENoYXJzKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG5cbiAgICAgICAgICBpZiAocG9zc2libGVCb3VuZGFyeUVuZCA9PSB0aGlzLmJvdW5kYXJ5TGluZUVuZCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YVBhcnQucmVtb3ZlRnJvbUJvZHkocG9zc2libGVCb3VuZGFyeUVuZClcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGFQYXJ0RG9uZSgpXG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlUmVxdWVzdCgpXG4gICAgICAgICAgfSBlbHNlIGlmIChwb3NzaWJsZUJvdW5kYXJ5TmV4dCA9PSB0aGlzLmJvdW5kYXJ5TGluZU5leHQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGFQYXJ0LnJlbW92ZUZyb21Cb2R5KHBvc3NpYmxlQm91bmRhcnlOZXh0KVxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YVBhcnREb25lKClcbiAgICAgICAgICAgIHRoaXMubmV3Rm9ybURhdGFQYXJ0KClcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29udGVudExlbmd0aCAmJiB0aGlzLmJvZHlMZW5ndGggPj0gdGhpcy5jb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhUGFydERvbmUoKVxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVJlcXVlc3QoKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtRGF0YVBhcnQuY29udGVudExlbmd0aCAmJiB0aGlzLmJvZHlMZW5ndGggPj0gdGhpcy5mb3JtRGF0YVBhcnQuY29udGVudExlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YVBhcnREb25lKClcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic3R1YlwiKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgXCJwb3N0LWJvZHlcIjpcbiAgICAgICAgICBpZiAoIXRoaXMucG9zdEJvZHlDaGFycykgdGhyb3cgbmV3IEVycm9yKFwicG9zdEJvZHlDaGFycyBub3QgaW5pdGlhbGl6ZWRcIilcblxuICAgICAgICAgIHRoaXMucG9zdEJvZHlDaGFyc1t0aGlzLmJvZHlMZW5ndGggLSAxXSA9IGNoYXJcblxuICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRMZW5ndGggJiYgdGhpcy5ib2R5TGVuZ3RoID49IHRoaXMuY29udGVudExlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wb3N0UmVxdWVzdERvbmUoKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoKCkgPT4gW2BVbmtub3duIHN0YXRlIGZvciByZXF1ZXN0IGJ1ZmZlcmAsIHtzdGF0ZTogdGhpcy5zdGF0ZX1dKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb21wbGV0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEuc3ViYXJyYXkoaW5kZXggKyAxKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEByZXR1cm5zIHtIZWFkZXJ9IC0gVGhlIGhlYWRlci5cbiAgICovXG4gIGdldEhlYWRlcihuYW1lKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5oZWFkZXJzQnlOYW1lW25hbWUudG9Mb3dlckNhc2UoKS50cmltKCldXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1Z0xvd0xldmVsKCgpID0+IFtgZ2V0SGVhZGVyICR7bmFtZX1gLCB7cmVzdWx0OiByZXN1bHQ/LnRvU3RyaW5nKCl9XSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gLSBUaGUgaGVhZGVycyBoYXNoLlxuICAgKi9cbiAgZ2V0SGVhZGVyc0hhc2goKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGhlYWRlckZvcm1hdHRlZE5hbWUgaW4gdGhpcy5oZWFkZXJzQnlOYW1lKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmhlYWRlcnNCeU5hbWVbaGVhZGVyRm9ybWF0dGVkTmFtZV1cblxuICAgICAgcmVzdWx0W2hlYWRlci5nZXROYW1lKCldID0gaGVhZGVyLmdldFZhbHVlKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgZm9ybURhdGFQYXJ0RG9uZSgpIHtcbiAgICBjb25zdCBmb3JtRGF0YVBhcnQgPSB0aGlzLmZvcm1EYXRhUGFydFxuXG4gICAgaWYgKCFmb3JtRGF0YVBhcnQpIHRocm93IG5ldyBFcnJvcihcImZvcm1EYXRhUGFydCB3YXNudCBzZXRcIilcblxuICAgIHRoaXMuZm9ybURhdGFQYXJ0ID0gdW5kZWZpbmVkXG4gICAgZm9ybURhdGFQYXJ0LmZpbmlzaCgpXG5cbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwiZm9ybS1kYXRhLXBhcnRcIiwgZm9ybURhdGFQYXJ0KVxuICB9XG5cbiAgaXNNdWx0aVBhcnR5Rm9ybURhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlQYXJ0eUZvcm1EYXRhXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgbmV3Rm9ybURhdGFQYXJ0KCkge1xuICAgIHRoaXMuZm9ybURhdGFQYXJ0ID0gbmV3IEZvcm1EYXRhUGFydCgpXG4gICAgdGhpcy5zZXRTdGF0ZShcIm11bHRpLXBhcnQtZm9ybS1kYXRhLWhlYWRlclwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaW5lIC0gTGluZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgcGFyc2UobGluZSkge1xuICAgIGlmICh0aGlzLnN0YXRlID09IFwic3RhdHVzXCIpIHtcbiAgICAgIHRoaXMucGFyc2VTdGF0dXNMaW5lKGxpbmUpXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09IFwiaGVhZGVyc1wiKSB7XG4gICAgICB0aGlzLnBhcnNlSGVhZGVyKGxpbmUpXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09IFwiY2h1bmtlZC1zaXplXCIpIHtcbiAgICAgIHRoaXMucGFyc2VDaHVua1NpemVMaW5lKGxpbmUpXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09IFwiY2h1bmtlZC10cmFpbGVyXCIpIHtcbiAgICAgIGlmIChsaW5lID09IFwiXFxyXFxuXCIpIHtcbiAgICAgICAgdGhpcy5maW5pc2hDaHVua2VkQm9keSgpXG4gICAgICAgIHRoaXMuY29tcGxldGVSZXF1ZXN0KClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT0gXCJtdWx0aS1wYXJ0LWZvcm0tZGF0YVwiKSB7XG4gICAgICBpZiAobGluZSA9PSB0aGlzLmJvdW5kYXJ5TGluZSkge1xuICAgICAgICB0aGlzLm5ld0Zvcm1EYXRhUGFydCgpXG4gICAgICB9IGVsc2UgaWYgKGxpbmUgPT0gXCJcXHJcXG5cIikge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFwiZG9uZVwiKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBib3VuZGFyeSBsaW5lIGJ1dCBkaWRuJ3QgZ2V0IGl0OiAke2xpbmV9YClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT0gXCJtdWx0aS1wYXJ0LWZvcm0tZGF0YS1oZWFkZXJcIikge1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5yZWFkSGVhZGVyRnJvbUxpbmUobGluZSlcblxuICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybURhdGFQYXJ0KSB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtRGF0YVBhcnQgbm90IHNldFwiKVxuXG4gICAgICAgIHRoaXMuZm9ybURhdGFQYXJ0LmFkZEhlYWRlcihoZWFkZXIpXG4gICAgICAgIC8vdGhpcy5zdGF0ZSA9PSBcIm11bHRpLXBhcnQtZm9ybS1kYXRhXCJcbiAgICAgIH0gZWxzZSBpZiAobGluZSA9PSBcIlxcclxcblwiKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXCJtdWx0aS1wYXJ0LWZvcm0tZGF0YS1ib2R5XCIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGF0ZSBwYXJzaW5nIGxpbmU6ICR7dGhpcy5zdGF0ZX1gKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGluZSAtIExpbmUuXG4gICAqIEByZXR1cm5zIHtIZWFkZXIgfCB1bmRlZmluZWR9IC0gVGhlIGhlYWRlciBmcm9tIGxpbmUuXG4gICAqL1xuICByZWFkSGVhZGVyRnJvbUxpbmUobGluZSkge1xuICAgIGNvbnN0IG1hdGNoID0gbGluZS5tYXRjaCgvXiguKyk6ICguKylcXHJcXG4vKVxuXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBuZXcgSGVhZGVyKG1hdGNoWzFdLCBtYXRjaFsyXSlcblxuICAgICAgcmV0dXJuIGhlYWRlclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hlYWRlcn0gaGVhZGVyIC0gSGVhZGVyIHZhbHVlLlxuICAgKi9cbiAgYWRkSGVhZGVyKGhlYWRlcikge1xuICAgIGNvbnN0IGZvcm1hdHRlZE5hbWUgPSBoZWFkZXIuZ2V0Rm9ybWF0dGVkTmFtZSgpXG5cbiAgICB0aGlzLmhlYWRlcnNCeU5hbWVbZm9ybWF0dGVkTmFtZV0gPSBoZWFkZXJcblxuICAgIGlmIChmb3JtYXR0ZWROYW1lID09IFwiY29udGVudC1sZW5ndGhcIikgdGhpcy5jb250ZW50TGVuZ3RoID0gcGFyc2VJbnQoaGVhZGVyLmdldFZhbHVlKCkpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpbmUgLSBMaW5lLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBwYXJzZUhlYWRlcihsaW5lKSB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5yZWFkSGVhZGVyRnJvbUxpbmUobGluZSlcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gYFBhcnNlZCBoZWFkZXI6ICR7aGVhZGVyLnRvU3RyaW5nKCl9YClcbiAgICAgIHRoaXMuYWRkSGVhZGVyKGhlYWRlcilcbiAgICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJoZWFkZXJcIiwgaGVhZGVyKVxuICAgIH0gZWxzZSBpZiAobGluZSA9PSBcIlxcclxcblwiKSB7XG4gICAgICBjb25zdCBodHRwTWV0aG9kID0gdGhpcy5odHRwTWV0aG9kPy50b1VwcGVyQ2FzZSgpXG5cbiAgICAgIGlmICghaHR0cE1ldGhvZCkgdGhyb3cgbmV3IEVycm9yKFwiSFRUUCBtZXRob2Qgbm90IHNldFwiKVxuXG4gICAgICBpZiAoIXRoaXMuZXhwZWN0c1JlcXVlc3RCb2R5KGh0dHBNZXRob2QpKSB7XG4gICAgICAgIHRoaXMuY29tcGxldGVSZXF1ZXN0KClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NodW5rZWRFbmNvZGluZygpKSB7XG4gICAgICAgIHRoaXMucmVhZGluZ0JvZHkgPSB0cnVlXG4gICAgICAgIHRoaXMuYm9keUxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQ2h1bmtlZEJvZHkoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWFkaW5nQm9keSA9IHRydWVcbiAgICAgICAgdGhpcy5ib2R5TGVuZ3RoID0gMFxuXG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5nZXRIZWFkZXIoXCJjb250ZW50LXR5cGVcIik/LnZhbHVlPy5tYXRjaCgvXm11bHRpcGFydFxcL2Zvcm0tZGF0YTtcXHMqYm91bmRhcnk9KC4rKSQvaSlcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0aGlzLmJvdW5kYXJ5ID0gbWF0Y2hbMV1cbiAgICAgICAgICB0aGlzLmJvdW5kYXJ5TGluZSA9IGAtLSR7dGhpcy5ib3VuZGFyeX1cXHJcXG5gXG4gICAgICAgICAgdGhpcy5ib3VuZGFyeUxpbmVOZXh0ID0gYFxcclxcbi0tJHt0aGlzLmJvdW5kYXJ5fVxcclxcbmBcbiAgICAgICAgICB0aGlzLmJvdW5kYXJ5TGluZUVuZCA9IGBcXHJcXG4tLSR7dGhpcy5ib3VuZGFyeX0tLWBcbiAgICAgICAgICB0aGlzLm11bHRpUGFydHlGb3JtRGF0YSA9IHRydWVcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKFwibXVsdGktcGFydC1mb3JtLWRhdGFcIilcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRlbnRMZW5ndGggPT09IDAgfHwgdGhpcy5jb250ZW50TGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlUmVxdWVzdCgpXG4gICAgICAgIH0gZWxzZSBpZiAoTnVtYmVyLmlzTmFOKHRoaXMuY29udGVudExlbmd0aCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb250ZW50IGxlbmd0aCBpcyBpbnZhbGlkXCIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJbXX0gKi9cbiAgICAgICAgICB0aGlzLnBvc3RCb2R5Q2hhcnMgPSBbXVxuXG4gICAgICAgICAgLy8gdGhpcy5wb3N0Qm9keUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLmNvbnRlbnRMZW5ndGgpXG4gICAgICAgICAgLy8gdGhpcy5wb3N0Qm9keUNoYXJzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5wb3N0Qm9keUJ1ZmZlcilcblxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXCJwb3N0LWJvZHlcIilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGluZSAtIExpbmUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHBhcnNlU3RhdHVzTGluZShsaW5lKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFtBLVotXSspICguKz8pIEhUVFBcXC8oLispXFxyXFxuLylcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgbWF0Y2ggc3RhdHVzIGxpbmUgZnJvbTogJHtsaW5lfWApXG4gICAgfVxuXG4gICAgdGhpcy5odHRwTWV0aG9kID0gbWF0Y2hbMV1cbiAgICB0aGlzLmh0dHBWZXJzaW9uID0gbWF0Y2hbM11cbiAgICB0aGlzLnBhdGggPSBtYXRjaFsyXVxuICAgIHRoaXMuc2V0U3RhdGUoXCJoZWFkZXJzXCIpXG4gICAgdGhpcy5sb2dnZXIuZGVidWdMb3dMZXZlbCgoKSA9PiBbXCJQYXJzZWQgc3RhdHVzIGxpbmVcIiwge2h0dHBNZXRob2Q6IHRoaXMuaHR0cE1ldGhvZCwgaHR0cFZlcnNpb246IHRoaXMuaHR0cFZlcnNpb24sIHBhdGg6IHRoaXMucGF0aH1dKVxuICB9XG5cbiAgcG9zdFJlcXVlc3REb25lKCkge1xuICAgIGlmICh0aGlzLnBvc3RCb2R5Q2hhcnMpIHtcbiAgICAgIHRoaXMucG9zdEJvZHkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHRoaXMucG9zdEJvZHlDaGFycylcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5wb3N0Qm9keUNoYXJzXG4gICAgLy8gZGVsZXRlIHRoaXMucG9zdEJvZHlCdWZmZXJcblxuICAgIHRoaXMuY29tcGxldGVSZXF1ZXN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaHR0cE1ldGhvZCAtIEhUVFAgbWV0aG9kLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSByZXF1ZXN0IGV4cGVjdHMgYSBib2R5LlxuICAgKi9cbiAgZXhwZWN0c1JlcXVlc3RCb2R5KGh0dHBNZXRob2QpIHtcbiAgICByZXR1cm4gIVtcIkdFVFwiLCBcIk9QVElPTlNcIiwgXCJIRUFEXCJdLmluY2x1ZGVzKGh0dHBNZXRob2QpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGUgcmVxdWVzdCB1c2VzIGNodW5rZWQgdHJhbnNmZXIgZW5jb2RpbmcuXG4gICAqL1xuICBpc0NodW5rZWRFbmNvZGluZygpIHtcbiAgICBjb25zdCB0cmFuc2ZlckVuY29kaW5nID0gdGhpcy5nZXRIZWFkZXIoXCJ0cmFuc2Zlci1lbmNvZGluZ1wiKT8udmFsdWU/LnRvTG93ZXJDYXNlKClcblxuICAgIHJldHVybiBCb29sZWFuKHRyYW5zZmVyRW5jb2Rpbmc/LmluY2x1ZGVzKFwiY2h1bmtlZFwiKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBpbml0aWFsaXplQ2h1bmtlZEJvZHkoKSB7XG4gICAgdGhpcy5jaHVua2VkQm9keUNoYXJzID0gW11cbiAgICB0aGlzLmN1cnJlbnRDaHVua1NpemUgPSB1bmRlZmluZWRcbiAgICB0aGlzLmN1cnJlbnRDaHVua0J5dGVzUmVhZCA9IDBcbiAgICB0aGlzLnNldFN0YXRlKFwiY2h1bmtlZC1zaXplXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpbmUgLSBDaHVuayBzaXplIGxpbmUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHBhcnNlQ2h1bmtTaXplTGluZShsaW5lKSB7XG4gICAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbSgpXG5cbiAgICBpZiAoIXRyaW1tZWQpIHJldHVyblxuXG4gICAgY29uc3Qgc2l6ZVRva2VuID0gdHJpbW1lZC5zcGxpdChcIjtcIilbMF0/LnRyaW0oKVxuXG4gICAgaWYgKCFzaXplVG9rZW4pIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaHVuayBzaXplIGxpbmU6ICR7bGluZX1gKVxuXG4gICAgY29uc3Qgc2l6ZSA9IE51bWJlci5wYXJzZUludChzaXplVG9rZW4sIDE2KVxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc2l6ZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaHVuayBzaXplOiAke3NpemVUb2tlbn1gKVxuXG4gICAgaWYgKHNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXCJjaHVua2VkLXRyYWlsZXJcIilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudENodW5rU2l6ZSA9IHNpemVcbiAgICB0aGlzLmN1cnJlbnRDaHVua0J5dGVzUmVhZCA9IDBcbiAgICB0aGlzLnNldFN0YXRlKFwiY2h1bmtlZC1kYXRhXCIpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgZmluaXNoQ2h1bmtlZEJvZHkoKSB7XG4gICAgaWYgKHRoaXMuY2h1bmtlZEJvZHlDaGFycykge1xuICAgICAgdGhpcy5wb3N0Qm9keSA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgdGhpcy5jaHVua2VkQm9keUNoYXJzKVxuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLmNodW5rZWRCb2R5Q2hhcnNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3U3RhdGUgLSBOZXcgc3RhdGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWdMb3dMZXZlbCgoKSA9PiBgQ2hhbmdpbmcgc3RhdGUgZnJvbSAke3RoaXMuc3RhdGV9IHRvICR7bmV3U3RhdGV9YClcbiAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGVcbiAgfVxuXG4gIGNvbXBsZXRlUmVxdWVzdCA9ICgpID0+IHtcbiAgICB0aGlzLnN0YXRlID0gXCJzdGF0dXNcIiAvLyBSZXNldCBzdGF0ZSB0byBuZXcgcmVxdWVzdFxuICAgIHRoaXMuY29tcGxldGVkID0gdHJ1ZVxuXG4gICAgaWYgKHRoaXMuZ2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIpPy52YWx1ZT8uc3RhcnRzV2l0aChcImFwcGxpY2F0aW9uL2pzb25cIikpIHtcbiAgICAgIHRoaXMucGFyc2VBcHBsaWNhdGlvbkpzb25QYXJhbXMoKVxuICAgIH0gZWxzZSBpZiAodGhpcy5tdWx0aVBhcnR5Rm9ybURhdGEpIHtcbiAgICAgIC8vIERvbmUgYWZ0ZXIgZWFjaCBuZXcgZm9ybSBkYXRhIHBhcnRcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJzZVF1ZXJ5U3RyaW5nUG9zdFBhcmFtcygpXG4gICAgfVxuXG4gICAgdGhpcy5ldmVudHMuZW1pdChcImNvbXBsZXRlZFwiKVxuICB9XG5cbiAgcGFyc2VBcHBsaWNhdGlvbkpzb25QYXJhbXMoKSB7XG4gICAgaWYgKHRoaXMucG9zdEJvZHkpIHtcbiAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IEpTT04ucGFyc2UodGhpcy5wb3N0Qm9keSlcblxuICAgICAgaW5jb3Jwb3JhdGUodGhpcy5wYXJhbXMsIG5ld1BhcmFtcylcbiAgICB9XG4gIH1cblxuICBwYXJzZVF1ZXJ5U3RyaW5nUG9zdFBhcmFtcygpIHtcbiAgICBpZiAodGhpcy5wb3N0Qm9keSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT59ICovXG4gICAgICAgIGNvbnN0IHVucGFyc2VkUGFyYW1zID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5wb3N0Qm9keSlcbiAgICAgICAgY29uc3QgcGFyYW1zVG9PYmplY3QgPSBuZXcgUGFyYW1zVG9PYmplY3QodW5wYXJzZWRQYXJhbXMpXG4gICAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IHBhcmFtc1RvT2JqZWN0LnRvT2JqZWN0KClcblxuICAgICAgICBpbmNvcnBvcmF0ZSh0aGlzLnBhcmFtcywgbmV3UGFyYW1zKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZW5zdXJlZEVycm9yID0gLyoqIEB0eXBlIHtFcnJvciAmIHt2ZWxvY2lvdXNDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj59fSAqLyAoZXJyb3IpXG5cbiAgICAgICAgZW5zdXJlZEVycm9yLnZlbG9jaW91c0NvbnRleHQgPSB7XG4gICAgICAgICAgLi4uKGVuc3VyZWRFcnJvci52ZWxvY2lvdXNDb250ZXh0IHx8IHt9KSxcbiAgICAgICAgICByZXF1ZXN0UGFyc2luZzoge1xuICAgICAgICAgICAgY29udGVudFR5cGU6IHRoaXMuZ2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIpPy52YWx1ZSxcbiAgICAgICAgICAgIGh0dHBNZXRob2Q6IHRoaXMuaHR0cE1ldGhvZCxcbiAgICAgICAgICAgIHBhcmFtZXRlcktleXM6IE9iamVjdC5rZXlzKHF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMucG9zdEJvZHkpKSxcbiAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgICAgIHBvc3RCb2R5UHJldmlldzogdHJ1bmNhdGVQcmV2aWV3KHRoaXMucG9zdEJvZHkpLFxuICAgICAgICAgICAgc3RhZ2U6IFwicXVlcnktc3RyaW5nLXBvc3QtcGFyYW1zXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlbnN1cmVkRXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-parser.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/request-parser.js"],"names":[],"mappings":"AAQA;IACE;;;OAGG;IACH,+BAFG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;KAClD,EAeA;IAXC,wDAAkC;IAClC,YAAc;IACd,mEAAgC;IAChC,sBAAyB;IACzB,kGAAkG;IAClG,QADW,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC,CAC9E;IAEhB,6BAAuD;IAMzD,0CAA0C;IAC1C,WADc,IAAI,CAMjB;IAED;;;OAGG;IACH,iBAAkB,cAHP,OAAO,oCAAoC,EAAE,OAG1B,KAFjB,IAAI,
|
|
1
|
+
{"version":3,"file":"request-parser.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/request-parser.js"],"names":[],"mappings":"AAQA;IACE;;;OAGG;IACH,+BAFG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;KAClD,EAeA;IAXC,wDAAkC;IAClC,YAAc;IACd,mEAAgC;IAChC,sBAAyB;IACzB,kGAAkG;IAClG,QADW,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC,CAC9E;IAEhB,6BAAuD;IAMzD,0CAA0C;IAC1C,WADc,IAAI,CAMjB;IAED;;;OAGG;IACH,iBAAkB,cAHP,OAAO,oCAAoC,EAAE,OAG1B,KAFjB,IAAI,CA4BhB;IAED;;;OAGG;IACH,OAAQ,MAHG,MAGC,KAFC,MAAM,GAAG,SAAS,CAQ9B;IAED;;;OAGG;IACH,gBAHW,MAAM,GACJ,MAAM,CAEiD;IAEpE,wDAAwD;IACxD,cADc,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACuB;IAE3D,4CAA4C;IAC5C,iBADc,MAAM,CACgD;IAEpE,6CAA6C;IAC7C,kBADc,MAAM,CACkD;IAEtE,qHAAqH;IACrH,iBADc;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAelE;IAED,4CAA4C;IAC5C,WADc,MAAM,GAAG,IAAI,CAK1B;IAED,qCAAqC;IACrC,WADc,MAAM,CACoC;IAExD,4CAA4C;IAC5C,WADc,MAAM,GAAG,IAAI,CAY1B;IAED,gDAAgD;IAChD,eADc,MAAM,GAAG,IAAI,CAC4B;IAEvD,sDAAsD;IACtD,oBADc,aAAa,CACqB;IAEhD,0CAA0C;IAC1C,mBADc,IAAI,CAOjB;IAFC,cAAmB;CAGtB;0BAjJyB,2BAA2B"}
|
|
@@ -38,9 +38,24 @@ export default class VelociousHttpServerClientRequestParser {
|
|
|
38
38
|
/** @type {Record<string, string | string[] | import("./uploaded-file/uploaded-file.js").default>} */
|
|
39
39
|
const unorderedParams = {};
|
|
40
40
|
unorderedParams[formDataPart.getName()] = formDataPart.getValue();
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
try {
|
|
42
|
+
const paramsToObject = new ParamsToObject(unorderedParams);
|
|
43
|
+
const newParams = paramsToObject.toObject();
|
|
44
|
+
incorporate(this.params, newParams);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const ensuredError = /** @type {Error & {velociousContext?: Record<string, unknown>}} */ (error);
|
|
48
|
+
ensuredError.velociousContext = {
|
|
49
|
+
...(ensuredError.velociousContext || {}),
|
|
50
|
+
requestParsing: {
|
|
51
|
+
formDataPartName: formDataPart.getName(),
|
|
52
|
+
httpMethod: this.getHttpMethod(),
|
|
53
|
+
path: this.getPath(),
|
|
54
|
+
stage: "form-data-part"
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
throw ensuredError;
|
|
58
|
+
}
|
|
44
59
|
};
|
|
45
60
|
/**
|
|
46
61
|
* @param {Buffer} data - Data payload.
|
|
@@ -111,4 +126,4 @@ export default class VelociousHttpServerClientRequestParser {
|
|
|
111
126
|
this.events.emit("done");
|
|
112
127
|
};
|
|
113
128
|
}
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QtcGFyc2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sWUFBWSxNQUFNLDhCQUE4QixDQUFBO0FBQ3ZELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFDbEQsT0FBTyxhQUFhLE1BQU0sMkJBQTJCLENBQUE7QUFFckQsTUFBTSxDQUFDLE9BQU8sT0FBTyxzQ0FBc0M7SUFDekQ7OztPQUdHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBQztRQUN6QixJQUFJLENBQUMsYUFBYTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUU3RCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtRQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtRQUN6QixrR0FBa0c7UUFDbEcsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFFaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7UUFDdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNuRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRUQsMENBQTBDO0lBQzFDLE9BQU87UUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUM1RCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3BFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQy9ELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFO1FBQ2hDLHFHQUFxRztRQUNyRyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUE7UUFFMUIsZUFBZSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUVqRSxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUMxRCxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUE7UUFFM0MsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDckMsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDZCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7UUFDckQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEMsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQSxDQUFDLENBQUM7SUFFcEUsd0RBQXdEO0lBQ3hELFVBQVUsS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUEsQ0FBQyxDQUFDO0lBRTNELDRDQUE0QztJQUM1QyxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFcEUsNkNBQTZDO0lBQzdDLGNBQWMsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUV0RSxxSEFBcUg7SUFDckgsYUFBYTtRQUNYLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQTtRQUU3RCxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRXpCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQTtRQUV0RCxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFFOUQsT0FBTztZQUNMLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2QsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDZixDQUFBO0lBQ0gsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxPQUFPO1FBQ0wsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUU1RSxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFeEQsNENBQTRDO0lBQzVDLE9BQU87UUFDTCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUV2QyxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsQyxDQUFDO2FBQU0sSUFBSSxVQUFVLElBQUksTUFBTSxFQUFFLENBQUM7WUFDaEMsT0FBTyxFQUFFLENBQUE7UUFDWCxDQUFDO2FBQU0sSUFBSSxVQUFVLElBQUksT0FBTyxFQUFFLENBQUM7WUFDakMsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxXQUFXLEtBQUssT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxDQUFBLENBQUMsQ0FBQztJQUV2RCxzREFBc0Q7SUFDdEQsZ0JBQWdCLEtBQUssT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFBLENBQUMsQ0FBQztJQUVoRCwwQ0FBMEM7SUFDMUMsV0FBVyxHQUFHLEdBQUcsRUFBRTtRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtRQUN4QixXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRW5ELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFBO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzFCLENBQUMsQ0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCIuLi8uLi91dGlscy9ldmVudC1lbWl0dGVyLmpzXCJcbmltcG9ydCB7aW5jb3Jwb3JhdGV9IGZyb20gXCJpbmNvcnBvcmF0b3JcIlxuaW1wb3J0IFBhcmFtc1RvT2JqZWN0IGZyb20gXCIuL3BhcmFtcy10by1vYmplY3QuanNcIlxuaW1wb3J0IFJlcXVlc3RCdWZmZXIgZnJvbSBcIi4vcmVxdWVzdC1idWZmZXIvaW5kZXguanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNIdHRwU2VydmVyQ2xpZW50UmVxdWVzdFBhcnNlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9ufSkge1xuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uZmlndXJhdGlvbiBnaXZlblwiKVxuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMuZGF0YSA9IFtdXG4gICAgdGhpcy5ldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgICB0aGlzLmhhc0NvbXBsZXRlZCA9IGZhbHNlXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5rbm93bltdPn0gKi9cbiAgICB0aGlzLnBhcmFtcyA9IHt9XG5cbiAgICB0aGlzLnJlcXVlc3RCdWZmZXIgPSBuZXcgUmVxdWVzdEJ1ZmZlcih7Y29uZmlndXJhdGlvbn0pXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vbihcImNvbXBsZXRlZFwiLCB0aGlzLnJlcXVlc3REb25lKVxuICAgIHRoaXMucmVxdWVzdEJ1ZmZlci5ldmVudHMub24oXCJmb3JtLWRhdGEtcGFydFwiLCB0aGlzLm9uRm9ybURhdGFQYXJ0KVxuICAgIHRoaXMucmVxdWVzdEJ1ZmZlci5ldmVudHMub24oXCJyZXF1ZXN0LWRvbmVcIiwgdGhpcy5yZXF1ZXN0RG9uZSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMucmVxdWVzdEJ1ZmZlci5ldmVudHMub2ZmKFwiY29tcGxldGVkXCIsIHRoaXMucmVxdWVzdERvbmUpXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vZmYoXCJmb3JtLWRhdGEtcGFydFwiLCB0aGlzLm9uRm9ybURhdGFQYXJ0KVxuICAgIHRoaXMucmVxdWVzdEJ1ZmZlci5ldmVudHMub2ZmKFwicmVxdWVzdC1kb25lXCIsIHRoaXMucmVxdWVzdERvbmUpXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmRlc3Ryb3koKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9yZXF1ZXN0LWJ1ZmZlci9mb3JtLWRhdGEtcGFydC5qc1wiKS5kZWZhdWx0fSBmb3JtRGF0YVBhcnQgLSBGb3JtIGRhdGEgcGFydC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgb25Gb3JtRGF0YVBhcnQgPSAoZm9ybURhdGFQYXJ0KSA9PiB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IGltcG9ydChcIi4vdXBsb2FkZWQtZmlsZS91cGxvYWRlZC1maWxlLmpzXCIpLmRlZmF1bHQ+fSAqL1xuICAgIGNvbnN0IHVub3JkZXJlZFBhcmFtcyA9IHt9XG5cbiAgICB1bm9yZGVyZWRQYXJhbXNbZm9ybURhdGFQYXJ0LmdldE5hbWUoKV0gPSBmb3JtRGF0YVBhcnQuZ2V0VmFsdWUoKVxuXG4gICAgY29uc3QgcGFyYW1zVG9PYmplY3QgPSBuZXcgUGFyYW1zVG9PYmplY3QodW5vcmRlcmVkUGFyYW1zKVxuICAgIGNvbnN0IG5ld1BhcmFtcyA9IHBhcmFtc1RvT2JqZWN0LnRvT2JqZWN0KClcblxuICAgIGluY29ycG9yYXRlKHRoaXMucGFyYW1zLCBuZXdQYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtCdWZmZXIgfCB1bmRlZmluZWR9IC0gUmVtYWluaW5nIGRhdGEsIGlmIGFueS5cbiAgICovXG4gIGZlZWQgPSAoZGF0YSkgPT4ge1xuICAgIGlmICh0aGlzLmhhc0NvbXBsZXRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVxdWVzdCBwYXJzZXIgYWxyZWFkeSBjb21wbGV0ZWRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0QnVmZmVyLmZlZWQoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGhlYWRlci5cbiAgICovXG4gIGdldEhlYWRlcihuYW1lKSB7IHJldHVybiB0aGlzLnJlcXVlc3RCdWZmZXIuZ2V0SGVhZGVyKG5hbWUpPy52YWx1ZSB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAtIFRoZSBoZWFkZXJzLiAgKi9cbiAgZ2V0SGVhZGVycygpIHsgcmV0dXJuIHRoaXMucmVxdWVzdEJ1ZmZlci5nZXRIZWFkZXJzSGFzaCgpIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gLSBUaGUgaHR0cCBtZXRob2QuICAqL1xuICBnZXRIdHRwTWV0aG9kKCkgeyByZXR1cm4gZGlnZyh0aGlzLCBcInJlcXVlc3RCdWZmZXJcIiwgXCJodHRwTWV0aG9kXCIpIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gLSBUaGUgaHR0cCB2ZXJzaW9uLiAgKi9cbiAgZ2V0SHR0cFZlcnNpb24oKSB7IHJldHVybiBkaWdnKHRoaXMsIFwicmVxdWVzdEJ1ZmZlclwiLCBcImh0dHBWZXJzaW9uXCIpIH1cblxuICAvKiogQHJldHVybnMge3tob3N0OiBzdHJpbmcsIHBvcnQ6IHN0cmluZywgcHJvdG9jb2w6IHN0cmluZ30gfCBudWxsfSAtIFBhcnNlZCBob3N0IGluZm8sIG9yIG51bGwgd2hlbiB1bmF2YWlsYWJsZS4gKi9cbiAgX2dldEhvc3RNYXRjaCgpIHtcbiAgICBjb25zdCByYXdIb3N0ID0gdGhpcy5yZXF1ZXN0QnVmZmVyLmdldEhlYWRlcihcIm9yaWdpblwiKT8udmFsdWVcblxuICAgIGlmICghcmF3SG9zdCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IG1hdGNoID0gcmF3SG9zdC5tYXRjaCgvXiguKyk6XFwvXFwvKC4rKSh8OihcXGQrKSkvKVxuXG4gICAgaWYgKCFtYXRjaCkgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBtYXRjaCBob3N0OiAke3Jhd0hvc3R9YClcblxuICAgIHJldHVybiB7XG4gICAgICBwcm90b2NvbDogbWF0Y2hbMV0sXG4gICAgICBob3N0OiBtYXRjaFsyXSxcbiAgICAgIHBvcnQ6IG1hdGNoWzRdXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmcgfCB2b2lkfSAtIFRoZSBob3N0LiAgKi9cbiAgZ2V0SG9zdCgpIHtcbiAgICBjb25zdCByYXdIb3N0U3BsaXQgPSB0aGlzLnJlcXVlc3RCdWZmZXIuZ2V0SGVhZGVyKFwiaG9zdFwiKT8udmFsdWU/LnNwbGl0KFwiOlwiKVxuXG4gICAgaWYgKHJhd0hvc3RTcGxpdCAmJiByYXdIb3N0U3BsaXRbMF0pIHJldHVybiByYXdIb3N0U3BsaXRbMF1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBwYXRoLiAgKi9cbiAgZ2V0UGF0aCgpIHsgcmV0dXJuIGRpZ2codGhpcywgXCJyZXF1ZXN0QnVmZmVyXCIsIFwicGF0aFwiKSB9XG5cbiAgLyoqIEByZXR1cm5zIHtudW1iZXIgfCB2b2lkfSAtIFRoZSBwb3J0LiAgKi9cbiAgZ2V0UG9ydCgpIHtcbiAgICBjb25zdCByYXdIb3N0U3BsaXQgPSB0aGlzLnJlcXVlc3RCdWZmZXIuZ2V0SGVhZGVyKFwiaG9zdFwiKT8udmFsdWU/LnNwbGl0KFwiOlwiKVxuICAgIGNvbnN0IGh0dHBNZXRob2QgPSB0aGlzLmdldEh0dHBNZXRob2QoKVxuXG4gICAgaWYgKHJhd0hvc3RTcGxpdCAmJiByYXdIb3N0U3BsaXRbMV0pIHtcbiAgICAgIHJldHVybiBwYXJzZUludChyYXdIb3N0U3BsaXRbMV0pXG4gICAgfSBlbHNlIGlmIChodHRwTWV0aG9kID09IFwiaHR0cFwiKSB7XG4gICAgICByZXR1cm4gODBcbiAgICB9IGVsc2UgaWYgKGh0dHBNZXRob2QgPT0gXCJodHRwc1wiKSB7XG4gICAgICByZXR1cm4gNDQzXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfSAtIFRoZSBwcm90b2NvbC4gICovXG4gIGdldFByb3RvY29sKCkgeyByZXR1cm4gdGhpcy5fZ2V0SG9zdE1hdGNoKCk/LnByb3RvY29sIH1cblxuICAvKiogQHJldHVybnMge1JlcXVlc3RCdWZmZXJ9IC0gVGhlIHJlcXVlc3QgYnVmZmVyLiAgKi9cbiAgZ2V0UmVxdWVzdEJ1ZmZlcigpIHsgcmV0dXJuIHRoaXMucmVxdWVzdEJ1ZmZlciB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS4gICovXG4gIHJlcXVlc3REb25lID0gKCkgPT4ge1xuICAgIHRoaXMuaGFzQ29tcGxldGVkID0gdHJ1ZVxuICAgIGluY29ycG9yYXRlKHRoaXMucGFyYW1zLCB0aGlzLnJlcXVlc3RCdWZmZXIucGFyYW1zKVxuXG4gICAgdGhpcy5zdGF0ZSA9IFwiZG9uZVwiXG4gICAgdGhpcy5ldmVudHMuZW1pdChcImRvbmVcIilcbiAgfVxufVxuIl19
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QtcGFyc2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sWUFBWSxNQUFNLDhCQUE4QixDQUFBO0FBQ3ZELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFDbEQsT0FBTyxhQUFhLE1BQU0sMkJBQTJCLENBQUE7QUFFckQsTUFBTSxDQUFDLE9BQU8sT0FBTyxzQ0FBc0M7SUFDekQ7OztPQUdHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBQztRQUN6QixJQUFJLENBQUMsYUFBYTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUU3RCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtRQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtRQUN6QixrR0FBa0c7UUFDbEcsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFFaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7UUFDdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FB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QUFNLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEVBQUUsQ0FBQTtRQUNYLENBQUM7YUFBTSxJQUFJLFVBQVUsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNqQyxPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELFdBQVcsS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBRXZELHNEQUFzRDtJQUN0RCxnQkFBZ0IsS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUEsQ0FBQyxDQUFDO0lBRWhELDBDQUEwQztJQUMxQyxXQUFXLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ3hCLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFbkQsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUE7UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDMUIsQ0FBQyxDQUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcIi4uLy4uL3V0aWxzL2V2ZW50LWVtaXR0ZXIuanNcIlxuaW1wb3J0IHtpbmNvcnBvcmF0ZX0gZnJvbSBcImluY29ycG9yYXRvclwiXG5pbXBvcnQgUGFyYW1zVG9PYmplY3QgZnJvbSBcIi4vcGFyYW1zLXRvLW9iamVjdC5qc1wiXG5pbXBvcnQgUmVxdWVzdEJ1ZmZlciBmcm9tIFwiLi9yZXF1ZXN0LWJ1ZmZlci9pbmRleC5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0h0dHBTZXJ2ZXJDbGllbnRSZXF1ZXN0UGFyc2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb259KSB7XG4gICAgaWYgKCFjb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIGdpdmVuXCIpXG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5kYXRhID0gW11cbiAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICAgIHRoaXMuaGFzQ29tcGxldGVkID0gZmFsc2VcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmtub3duW10+fSAqL1xuICAgIHRoaXMucGFyYW1zID0ge31cblxuICAgIHRoaXMucmVxdWVzdEJ1ZmZlciA9IG5ldyBSZXF1ZXN0QnVmZmVyKHtjb25maWd1cmF0aW9ufSlcbiAgICB0aGlzLnJlcXVlc3RCdWZmZXIuZXZlbnRzLm9uKFwiY29tcGxldGVkXCIsIHRoaXMucmVxdWVzdERvbmUpXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vbihcImZvcm0tZGF0YS1wYXJ0XCIsIHRoaXMub25Gb3JtRGF0YVBhcnQpXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vbihcInJlcXVlc3QtZG9uZVwiLCB0aGlzLnJlcXVlc3REb25lKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS4gICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vZmYoXCJjb21wbGV0ZWRcIiwgdGhpcy5yZXF1ZXN0RG9uZSlcbiAgICB0aGlzLnJlcXVlc3RCdWZmZXIuZXZlbnRzLm9mZihcImZvcm0tZGF0YS1wYXJ0XCIsIHRoaXMub25Gb3JtRGF0YVBhcnQpXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vZmYoXCJyZXF1ZXN0LWRvbmVcIiwgdGhpcy5yZXF1ZXN0RG9uZSlcbiAgICB0aGlzLnJlcXVlc3RCdWZmZXIuZGVzdHJveSgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3JlcXVlc3QtYnVmZmVyL2Zvcm0tZGF0YS1wYXJ0LmpzXCIpLmRlZmF1bHR9IGZvcm1EYXRhUGFydCAtIEZvcm0gZGF0YSBwYXJ0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBvbkZvcm1EYXRhUGFydCA9IChmb3JtRGF0YVBhcnQpID0+IHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdIHwgaW1wb3J0KFwiLi91cGxvYWRlZC1maWxlL3VwbG9hZGVkLWZpbGUuanNcIikuZGVmYXVsdD59ICovXG4gICAgY29uc3QgdW5vcmRlcmVkUGFyYW1zID0ge31cblxuICAgIHVub3JkZXJlZFBhcmFtc1tmb3JtRGF0YVBhcnQuZ2V0TmFtZSgpXSA9IGZvcm1EYXRhUGFydC5nZXRWYWx1ZSgpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1zVG9PYmplY3QgPSBuZXcgUGFyYW1zVG9PYmplY3QodW5vcmRlcmVkUGFyYW1zKVxuICAgICAgY29uc3QgbmV3UGFyYW1zID0gcGFyYW1zVG9PYmplY3QudG9PYmplY3QoKVxuXG4gICAgICBpbmNvcnBvcmF0ZSh0aGlzLnBhcmFtcywgbmV3UGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlbnN1cmVkRXJyb3IgPSAvKiogQHR5cGUge0Vycm9yICYge3ZlbG9jaW91c0NvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn19ICovIChlcnJvcilcblxuICAgICAgZW5zdXJlZEVycm9yLnZlbG9jaW91c0NvbnRleHQgPSB7XG4gICAgICAgIC4uLihlbnN1cmVkRXJyb3IudmVsb2Npb3VzQ29udGV4dCB8fCB7fSksXG4gICAgICAgIHJlcXVlc3RQYXJzaW5nOiB7XG4gICAgICAgICAgZm9ybURhdGFQYXJ0TmFtZTogZm9ybURhdGFQYXJ0LmdldE5hbWUoKSxcbiAgICAgICAgICBodHRwTWV0aG9kOiB0aGlzLmdldEh0dHBNZXRob2QoKSxcbiAgICAgICAgICBwYXRoOiB0aGlzLmdldFBhdGgoKSxcbiAgICAgICAgICBzdGFnZTogXCJmb3JtLWRhdGEtcGFydFwiXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZW5zdXJlZEVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIC0gRGF0YSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7QnVmZmVyIHwgdW5kZWZpbmVkfSAtIFJlbWFpbmluZyBkYXRhLCBpZiBhbnkuXG4gICAqL1xuICBmZWVkID0gKGRhdGEpID0+IHtcbiAgICBpZiAodGhpcy5oYXNDb21wbGV0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlcXVlc3QgcGFyc2VyIGFscmVhZHkgY29tcGxldGVkXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdEJ1ZmZlci5mZWVkKGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBoZWFkZXIuXG4gICAqL1xuICBnZXRIZWFkZXIobmFtZSkgeyByZXR1cm4gdGhpcy5yZXF1ZXN0QnVmZmVyLmdldEhlYWRlcihuYW1lKT8udmFsdWUgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gLSBUaGUgaGVhZGVycy4gICovXG4gIGdldEhlYWRlcnMoKSB7IHJldHVybiB0aGlzLnJlcXVlc3RCdWZmZXIuZ2V0SGVhZGVyc0hhc2goKSB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGh0dHAgbWV0aG9kLiAgKi9cbiAgZ2V0SHR0cE1ldGhvZCgpIHsgcmV0dXJuIGRpZ2codGhpcywgXCJyZXF1ZXN0QnVmZmVyXCIsIFwiaHR0cE1ldGhvZFwiKSB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGh0dHAgdmVyc2lvbi4gICovXG4gIGdldEh0dHBWZXJzaW9uKCkgeyByZXR1cm4gZGlnZyh0aGlzLCBcInJlcXVlc3RCdWZmZXJcIiwgXCJodHRwVmVyc2lvblwiKSB9XG5cbiAgLyoqIEByZXR1cm5zIHt7aG9zdDogc3RyaW5nLCBwb3J0OiBzdHJpbmcsIHByb3RvY29sOiBzdHJpbmd9IHwgbnVsbH0gLSBQYXJzZWQgaG9zdCBpbmZvLCBvciBudWxsIHdoZW4gdW5hdmFpbGFibGUuICovXG4gIF9nZXRIb3N0TWF0Y2goKSB7XG4gICAgY29uc3QgcmF3SG9zdCA9IHRoaXMucmVxdWVzdEJ1ZmZlci5nZXRIZWFkZXIoXCJvcmlnaW5cIik/LnZhbHVlXG5cbiAgICBpZiAoIXJhd0hvc3QpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBtYXRjaCA9IHJhd0hvc3QubWF0Y2goL14oLispOlxcL1xcLyguKykofDooXFxkKykpLylcblxuICAgIGlmICghbWF0Y2gpIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgbWF0Y2ggaG9zdDogJHtyYXdIb3N0fWApXG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJvdG9jb2w6IG1hdGNoWzFdLFxuICAgICAgaG9zdDogbWF0Y2hbMl0sXG4gICAgICBwb3J0OiBtYXRjaFs0XVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nIHwgdm9pZH0gLSBUaGUgaG9zdC4gICovXG4gIGdldEhvc3QoKSB7XG4gICAgY29uc3QgcmF3SG9zdFNwbGl0ID0gdGhpcy5yZXF1ZXN0QnVmZmVyLmdldEhlYWRlcihcImhvc3RcIik/LnZhbHVlPy5zcGxpdChcIjpcIilcblxuICAgIGlmIChyYXdIb3N0U3BsaXQgJiYgcmF3SG9zdFNwbGl0WzBdKSByZXR1cm4gcmF3SG9zdFNwbGl0WzBdXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gLSBUaGUgcGF0aC4gICovXG4gIGdldFBhdGgoKSB7IHJldHVybiBkaWdnKHRoaXMsIFwicmVxdWVzdEJ1ZmZlclwiLCBcInBhdGhcIikgfVxuXG4gIC8qKiBAcmV0dXJucyB7bnVtYmVyIHwgdm9pZH0gLSBUaGUgcG9ydC4gICovXG4gIGdldFBvcnQoKSB7XG4gICAgY29uc3QgcmF3SG9zdFNwbGl0ID0gdGhpcy5yZXF1ZXN0QnVmZmVyLmdldEhlYWRlcihcImhvc3RcIik/LnZhbHVlPy5zcGxpdChcIjpcIilcbiAgICBjb25zdCBodHRwTWV0aG9kID0gdGhpcy5nZXRIdHRwTWV0aG9kKClcblxuICAgIGlmIChyYXdIb3N0U3BsaXQgJiYgcmF3SG9zdFNwbGl0WzFdKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQocmF3SG9zdFNwbGl0WzFdKVxuICAgIH0gZWxzZSBpZiAoaHR0cE1ldGhvZCA9PSBcImh0dHBcIikge1xuICAgICAgcmV0dXJuIDgwXG4gICAgfSBlbHNlIGlmIChodHRwTWV0aG9kID09IFwiaHR0cHNcIikge1xuICAgICAgcmV0dXJuIDQ0M1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH0gLSBUaGUgcHJvdG9jb2wuICAqL1xuICBnZXRQcm90b2NvbCgpIHsgcmV0dXJuIHRoaXMuX2dldEhvc3RNYXRjaCgpPy5wcm90b2NvbCB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZXF1ZXN0QnVmZmVyfSAtIFRoZSByZXF1ZXN0IGJ1ZmZlci4gICovXG4gIGdldFJlcXVlc3RCdWZmZXIoKSB7IHJldHVybiB0aGlzLnJlcXVlc3RCdWZmZXIgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuICAqL1xuICByZXF1ZXN0RG9uZSA9ICgpID0+IHtcbiAgICB0aGlzLmhhc0NvbXBsZXRlZCA9IHRydWVcbiAgICBpbmNvcnBvcmF0ZSh0aGlzLnBhcmFtcywgdGhpcy5yZXF1ZXN0QnVmZmVyLnBhcmFtcylcblxuICAgIHRoaXMuc3RhdGUgPSBcImRvbmVcIlxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJkb25lXCIpXG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"velocious": "build/bin/velocious.js"
|
|
4
4
|
},
|
|
5
5
|
"name": "velocious",
|
|
6
|
-
"version": "1.0.
|
|
6
|
+
"version": "1.0.242",
|
|
7
7
|
"main": "build/index.js",
|
|
8
8
|
"types": "build/index.d.ts",
|
|
9
9
|
"files": [
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"better-localstorage": "^1.0.7",
|
|
44
44
|
"debounce": "^3.0.0",
|
|
45
45
|
"diggerize": "^1.0.5",
|
|
46
|
-
"ejs": "^
|
|
46
|
+
"ejs": "^5.0.1",
|
|
47
47
|
"env-sense": "^1.0.2",
|
|
48
48
|
"epic-locks": "^1.0.7",
|
|
49
49
|
"escape-string-regexp": "^1.0.5",
|