@sabstravtech/obtservices 0.2.2505201645 → 0.2.2506041247
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/base/lib/vendor/classes/carhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +2 -0
- package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/interfaces/hotel-stars-to-hide.interface.d.ts +7 -0
- package/base/lib/vendor/types/types.d.ts +5 -1
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.js +285 -190
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +4 -3
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +36 -9
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +58 -26
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +4 -3
- package/esm2015/base/lib/vendor/classes/helpers.js +5 -5
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +22 -31
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +17 -7
- package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
- package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/hotel-stars-to-hide.interface.js +1 -1
- package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +5 -3
- package/esm2015/base/lib/vendor/services/logon.service.js +6 -3
- package/esm2015/base/lib/vendor/services/search.service.js +25 -14
- package/esm2015/base/lib/vendor/types/types.js +10 -2
- package/fesm2015/sabstravtech-obtservices-base.js +179 -93
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -1214,7 +1214,7 @@ export class BaseHelperRoutines {
|
|
|
1214
1214
|
}
|
|
1215
1215
|
createFlightFilters(journeys, defaultFilters, via) {
|
|
1216
1216
|
return journeys.reduce((filters, result1) => {
|
|
1217
|
-
var _a;
|
|
1217
|
+
var _a, _b;
|
|
1218
1218
|
const outStops = result1.outboundFlights.length - 1;
|
|
1219
1219
|
filters.stops[outStops] = filters.stops[outStops] || {
|
|
1220
1220
|
display: outStops === 0 ? 'Direct' : `${outStops} stop` + (outStops !== 1 ? 's' : ''),
|
|
@@ -1223,7 +1223,7 @@ export class BaseHelperRoutines {
|
|
|
1223
1223
|
};
|
|
1224
1224
|
const requiresReason = result1.unavailable
|
|
1225
1225
|
? TravelPolicies.UNAVAILABLE
|
|
1226
|
-
: result1.requiresReasonKeys
|
|
1226
|
+
: ((_a = result1.requiresReasonKeys) === null || _a === void 0 ? void 0 : _a.length)
|
|
1227
1227
|
? TravelPolicies.ALLOW_WITH_REASON
|
|
1228
1228
|
: TravelPolicies.IN_POLICY;
|
|
1229
1229
|
if (requiresReason !== 'Unavailable') {
|
|
@@ -1253,7 +1253,7 @@ export class BaseHelperRoutines {
|
|
|
1253
1253
|
// };
|
|
1254
1254
|
if (flight.fareInfo.type === 'Private') {
|
|
1255
1255
|
filters.privateFares[flight.fareInfo.title] = filters.privateFares[flight.fareInfo.title] || {
|
|
1256
|
-
display: flight.fareInfo.title,
|
|
1256
|
+
display: flight.fareInfo.title === "Corporate Fare" ? "Client" : flight.fareInfo.title,
|
|
1257
1257
|
selected: false,
|
|
1258
1258
|
value: flight.fareInfo.title
|
|
1259
1259
|
};
|
|
@@ -1278,7 +1278,7 @@ export class BaseHelperRoutines {
|
|
|
1278
1278
|
result1.outboundFlights.forEach(getAirline);
|
|
1279
1279
|
}
|
|
1280
1280
|
result1.outboundFlights.forEach(updateFlightItems);
|
|
1281
|
-
const baggageArray = (
|
|
1281
|
+
const baggageArray = (_b = result1.baggageAllowance) === null || _b === void 0 ? void 0 : _b.filter(a => (a === null || a === void 0 ? void 0 : a.type) === 'CheckIn').map(a => a === null || a === void 0 ? void 0 : a.qty);
|
|
1282
1282
|
const baggage = baggageArray.length ? Math.min(...baggageArray) : 0;
|
|
1283
1283
|
filters.baggage[baggage] = filters.baggage[baggage] || {
|
|
1284
1284
|
selected: false,
|
|
@@ -1994,4 +1994,4 @@ __decorate([
|
|
|
1994
1994
|
function isSet(obj) {
|
|
1995
1995
|
return obj !== undefined && obj !== null;
|
|
1996
1996
|
}
|
|
1997
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFjLE1BQU0sUUFBUSxDQUFDO0FBT3BDLE9BQU8sRUFDTCxtQkFBbUIsRUFLbkIsbUJBQW1CLEVBSW5CLGNBQWMsRUFHZCxjQUFjLEVBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBTUwsZ0JBQWdCLEVBR2hCLGFBQWEsRUFHYixXQUFXLEVBSVosTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFPakQsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7QUFDdEMsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFDcEMsTUFBTSw0QkFBNEIsR0FBRyxFQUFFLENBQUM7QUFDeEMsTUFBTSx5QkFBeUIsR0FBRyxFQUFFLENBQUM7QUFDckMsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLENBQUM7QUFDdkMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLENBQUM7QUFDdEMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFDcEMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUM7QUFDckMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLENBQUM7QUFDdkMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUM7QUFDeEMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFL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RyxLQUFLLElBQUksQ0FBQztBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IF8sIHsgZm9yRWFjaCB9IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcblxuaW1wb3J0IHsgQmFza2V0RGV0YWlscyB9IGZyb20gJy4uL3NlcnZpY2VzL2VudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xuLy8gaW1wb3J0IHsgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkIH0gZnJvbSAnLi9tYW5hZ2VtZW50LWluZm8tYW5kLXZhbGlkJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XG5pbXBvcnQge1xuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxuICBGbGlnaHRHcm91cHMsXG4gIE1haW5GbGlnaHRDYWJpbkNsYXNzLFxuICBNaW5NYXgsXG4gIE5nYkRhdGVTdHJ1Y3QsXG4gIE9CVEZsaWdodENhYmluQ2xhc3MsXG4gIE9CVFJhaWxKb3VybmV5RmFyZSxcbiAgU2NoZW1hLFxuICBVbnBhY2tlZCxcbiAgUHJlZmVycmVkRmxhZ3MsXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSxcbiAgVHJhdmVsUG9saWNpZXNcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtcbiAgQWlycG9ydCxcbiAgQmFnZ2FnZUFsbG93YW5jZSxcbiAgQmFza2V0SXRlbSxcbiAgQ2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHksXG4gIEZhcmVDb25kaXRpb25zLFxuICBGbGlnaHRDYWJpbkNsYXNzLFxuICBGbGlnaHRJdGluZXJhcnksXG4gIEZsaWdodEpvdXJuZXksXG4gIFBhc3NlbmdlclR5cGUsXG4gIFJlY2VudFNlYXJjaFRyYXZlbGxlcixcbiAgU2VydmljZSxcbiAgU2VydmljZVR5cGUsXG4gIFVzZXJQYXNzZW5nZXJUeXBlSW5wdXQsXG4gIElucHV0RmxpZ2h0Sm91cm5leSxcbiAgVHJhdmVsbGVyQXJnXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHsgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc3VwcGxlbWVudGFyeS1ib29raW5nLWluZm8taW1wbCc7XG5pbXBvcnQgeyBNZW1vcmlzZSB9IGZyb20gJy4vbGltaXRlZC1jYWNoZS5jbGFzcyc7XG5pbXBvcnQgeyBGbGlnaHRGaWx0ZXJzLCBGbGlnaHRGaWx0ZXJzUmVjb3JkS2V5cyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LWZpbHRlcnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJ1bGVzLCBVbmF2YWlsYWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvc3VtbWFyeS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VsZWN0RmlsdGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3QtZmlsdGVyLmludGVyZmFjZSc7XG5cbmRlY2xhcmUgdmFyIGhleF9obWFjX21kNTogYW55O1xuXG5jb25zdCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDE2O1xuY29uc3QgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XG5jb25zdCBFVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XG5jb25zdCBDT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTU7XG5jb25zdCBMT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxMjtcbmNvbnN0IEZMSUdIVF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XG5jb25zdCBSQUlMX01BWF9JTkZBTlRfQUdFX1lFQVJTID0gMDtcbmNvbnN0IENPQUNIX01BWF9JTkZBTlRfQUdFX1lFQVJTID0gMDtcbmNvbnN0IExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xuY29uc3QgTUVUUkVTX1RPX01JTEVTX0NPTlZFUlNJT04gPSAxNjA5O1xuY29uc3QgVElNRV9CQVNFID0gNjA7XG5jb25zdCBHUk9VUF9USUNLRVRfQ09ERVMgPSBbJ0dTJywgJ0FJRycsICdHUlAnLCAnR1UzJywgJ0dVNCcsICdHVUMnLCAnTVBHJywgJzJUUicsICdTR1UnLCAnR1NVJ107XG5cbmV4cG9ydCBjbGFzcyBCYXNlSGVscGVyUm91dGluZXMge1xuICBzdGF0aWMgUkVBRF9EQVRFX0ZPUk1BVCA9ICdkZCwgRCBNTU0gWVlZWSc7XG4gIHN0YXRpYyBSRUFEX1RJTUVfRk9STUFUID0gJ0hIOm1tJztcbiAgc3RhdGljIERBVEVfRk9STUFUID0gJ1lZTU1ERCc7XG4gIHN0YXRpYyBHUkFQSFFMX0RBVEFfRk9STUFUX1RJTUUgPSAnWVlZWS1NTS1ERCBISDptbTpzcyc7XG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVQgPSAnWVlZWS1NTS1ERCc7XG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVRfVElNRSA9ICdZWVlZLU1NLUREIEhIOm1tJztcbiAgc3RhdGljIElTT19EQVRBX0ZPUk1BVF9OT19IWVBIQU5TID0gJ1lZWVlNTUREJztcbiAgc3RhdGljIEdST1VORFNQQU5fREFUQV9USU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1onO1xuICBzdGF0aWMgVElNRV9GT1JNQVQgPSAnSEhtbSc7XG4gIHN0YXRpYyBUSU1FX0ZPUk1BVF9DT0xPTiA9ICdISDptbSc7XG4gIHN0YXRpYyBNTUREWVlfREFURSA9ICdERE1NWVlZWSc7XG4gIHN0YXRpYyBHUkFQSFFMX0RBVEVUSU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XG4gIHN0YXRpYyBwcmVmZXJyZWRGbGlwOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge1xuICAgICcxJzogOSxcbiAgICAnMic6IDgsXG4gICAgJzMnOiA3LFxuICAgICc0JzogNixcbiAgICAnNSc6IDUsXG4gICAgJzYnOiA0LFxuICAgICc3JzogMyxcbiAgICAnOCc6IDIsXG4gICAgJzknOiAxXG4gIH07XG5cbiAgaXNHcm91cFRpY2tldChjb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gR1JPVVBfVElDS0VUX0NPREVTLmluY2x1ZGVzKGNvZGUudG9VcHBlckNhc2UoKS50cmltKCkpO1xuICB9XG5cbiAgbWluVG9Ib3VyKGR1cjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke01hdGguZmxvb3IoZHVyIC8gNjApfWggJHtkdXIgJSA2MH1tYDtcbiAgfVxuXG4gIG1ha2VDb2xvblRpbWUodGltZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRpbWUuc3Vic3RyaW5nKDAsIDIpICsgJzonICsgdGltZS5zdWJzdHJpbmcoMiwgNCk7XG4gIH1cblxuICBub25OdWxsTWluKGtleTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShcbiAgICAgIChjdXJyZW50LCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW1ba2V5XSkge1xuICAgICAgICAgIGlmIChjdXJyZW50Lm1pbiA+IE51bWJlcihpdGVtW2tleV0pKSB7XG4gICAgICAgICAgICByZXR1cm4geyBpdGVtLCBtaW46IE51bWJlcihpdGVtW2tleV0pIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSxcbiAgICAgIHsgbWluOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgaXRlbTogbnVsbCB9XG4gICAgKS5pdGVtO1xuICB9XG5cbiAgam9pbkJ5Q29tbWEoLi4uYXR0cmlidXRlczogYW55W10pOiBzdHJpbmcge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgICAucmVkdWNlKChhY2MsIGF0dHIpID0+IHtcbiAgICAgICAgaWYgKF8uaXNFbXB0eShhdHRyKSkge1xuICAgICAgICAgIGFjYyArPSBhdHRyICsgJywnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCAnJylcbiAgICAgIC5zbGljZSgwLCAtMSk7XG4gIH1cblxuICBtdXR1YWxseUluY2x1ZGUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGEuaW5jbHVkZXMoYikgfHwgYi5pbmNsdWRlcyhhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1RyeWluZyB0byBtdXR1YWxseSBjb21wYXJlIHVuZGVmaW5lZCB2YXJpYWJsZS4nKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmaW5kQnlLZXkoYXJyYXk6IGFueVtdLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIGFycmF5XG4gICAgICAuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSB2YWx1ZTtcbiAgICAgIH0pXG4gICAgICAucG9wKCk7XG4gIH1cblxuICBkYXRlVG9OZ0RhdGUoZGF0ZTogRGF0ZSk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB7XG4gICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcbiAgICB9O1xuICB9XG5cbiAgY29udmVydFRvWVlNTUREKGRhdGU6IHN0cmluZykge1xuICAgIGlmIChkYXRlLmxlbmd0aCA+IDYpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy55eXl5bW1kZFRpbWVUb01vbWVudChkYXRlKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgZm9ybWF0RGF0ZVRvTU1ERFlZWShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xuICB9XG5cbiAgZm9ybWF0RGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuREFURV9GT1JNQVQpO1xuICB9XG5cbiAgZm9ybWF0VGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5USU1FX0ZPUk1BVCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXRUaW1lQ29sb24oZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLlRJTUVfRk9STUFUX0NPTE9OKTtcbiAgfVxuXG4gIGZvcm1hdElzb0RhdGUoZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVCk7XG4gIH1cblxuICBmb3JtYXRJc29EYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX1RJTUUpO1xuICB9XG5cbiAgZm9ybWF0R3JhcGhRTERhdGVUaW1lKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5HUkFQSFFMX0RBVEFfRk9STUFUX1RJTUUpO1xuICB9XG5cbiAgZm9ybWF0QWx0R3JhcGhxUUxEYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuR1JBUEhRTF9EQVRFVElNRV9GT1JNQVQpO1xuICB9XG5cbiAgZm9ybWF0R3JvdW5kc3BhbkRhdGVUaW1lKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XG4gICAgY29uc3QgaW5wdXREYXRlU3RyaW5nID0gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLkdST1VORFNQQU5fREFUQV9USU1FX0ZPUk1BVCk7XG4gICAgcmV0dXJuIGlucHV0RGF0ZVN0cmluZy5yZXBsYWNlKC9cXCtcXGR7Mn06XFxkezJ9JC8sICdaJyk7XG4gIH1cblxuICBmb3JtYXRJc29EYXRlTm9IeXBoYW5zKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5JU09fREFUQV9GT1JNQVRfTk9fSFlQSEFOUyk7XG4gIH1cblxuICBnZW5lcmF0ZVRpbWVzTGlzdChmcm9tID0gMCwgdG8gPSAyNCwgc3RlcCA9IDE1KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRhdGVUaW1lQXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaG91ciA9IDA7IGhvdXIgPCB0byAtIGZyb207IGhvdXIrKykge1xuICAgICAgZm9yIChsZXQgbWludXRlID0gMDsgbWludXRlIDwgNjA7IG1pbnV0ZSArPSBzdGVwKSB7XG4gICAgICAgIGRhdGVUaW1lQXJyYXkucHVzaChtb21lbnQoeyBob3VyLCBtaW51dGUgfSkuZm9ybWF0KCdISDptbScpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGVUaW1lQXJyYXk7XG4gIH1cblxuICBtb21lbnRUb05nRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50IHwgc3RyaW5nKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcbiAgICByZXR1cm4gdGhpcy5kYXRlVG9OZ0RhdGUoZGF0ZS50b0RhdGUoKSk7XG4gIH1cblxuICBuZ0RhdGVUb0RhdGUoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGggLSAxLCBkYXRlLmRheSk7XG4gIH1cblxuICBuZ0RhdGVUb01vbWVudChkYXRlOiBOZ2JEYXRlU3RydWN0LCB0aW1lPzogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XG4gICAgY29uc3QgbW9tID0gbW9tZW50KHRoaXMubmdEYXRlVG9EYXRlKGRhdGUpKTtcbiAgICBpZiAodGltZSkge1xuICAgICAgY29uc3QgdGltZXMgPSB0aW1lLnNwbGl0KCc6Jyk7XG4gICAgICBpZiAodGltZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIG1vbS5zZXQoJ2hvdXJzJywgTnVtYmVyKHRpbWVzWzBdKSkuc2V0KCdtaW51dGVzJywgTnVtYmVyKHRpbWVzWzFdKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb20uc2V0KCdob3VycycsIE51bWJlcih0aW1lLnN1YnN0cmluZygwLCAyKSkpLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lLnN1YnN0cmluZygyLCA0KSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9tO1xuICB9XG5cbiAgdG9kYXlUb05nYkRhdGVTdHJ1Y3QoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgY29uc3QgdG9kYXkgPSBtb21lbnQoKTtcbiAgICByZXR1cm4geyB5ZWFyOiB0b2RheS55ZWFyKCksIG1vbnRoOiB0b2RheS5tb250aCgpICsgMSwgZGF5OiB0b2RheS5kYXRlKCkgfTtcbiAgfVxuXG4gIG9iamVjdFRvQXJyYXkob2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubWFwKGkgPT4gb2JqZWN0W2ldKTtcbiAgfVxuXG4gIHl5eXltbWRkVG9EYXRlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDAsIDQpKSxcbiAgICAgIE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoNCwgNikpIC0gMSxcbiAgICAgIE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoNiwgOCkpXG4gICAgKTtcbiAgfVxuXG4gIHl5eXltbWRkVG9Nb21lbnQodmFsdWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiBtb21lbnQodGhpcy55eXl5bW1kZFRvRGF0ZSh2YWx1ZSkpO1xuICB9XG5cbiAgeXltbWRkVG9Nb21lbnQodmFsdWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiBtb21lbnQodmFsdWUsICdZWU1NREQnKTtcbiAgfVxuXG4gIHl5bW1kZFRvTmdiRGF0ZSh2YWx1ZTogc3RyaW5nKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUodGhpcy55eW1tZGRUb01vbWVudCh2YWx1ZSkpO1xuICB9XG5cbiAgeXltbWRkX2hobW1Ub01vbWVudChkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiBtb21lbnQoYCR7ZGF0ZX0gJHt0aW1lfWAsICdZWU1NREQgSEhtbScpO1xuICB9XG5cbiAgeXl5eW1tZGRfaGhtbVRvTW9tZW50KGRhdGU6IHN0cmluZywgdGltZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfSAke3RpbWV9YCwgJ1lZWVlNTUREIEhIbW0nKTtcbiAgfVxuXG4gIHl5eXltbWRkVG9OZ0RhdGUodmFsdWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB0aGlzLmRhdGVUb05nRGF0ZSh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XG4gIH1cblxuICB5eXl5bW1kZFRpbWVUb05nRGF0ZShkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIGNvbnN0IGR0ID0gdGhpcy55eXl5bW1kZFRvTW9tZW50KGRhdGUpXG4gICAgICAuYWRkKE51bWJlcih0aW1lLnN1YnN0cmluZygwLCAyKSksICdob3VycycpXG4gICAgICAuYWRkKE51bWJlcih0aW1lLnN1YnN0cmluZygyLCA0KSksICdtaW51dGVzJyk7XG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUoZHQpO1xuICB9XG5cbiAgeXl5eW1tZGRUaW1lVG9Nb21lbnQoZGF0ZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XG4gICAgaWYgKGRhdGUubGVuZ3RoID09PSA2KSB7XG4gICAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9YCwgJ1lZTU1ERCcpO1xuICAgIH1cbiAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9YCwgJ1lZWVlNTUREJyk7XG4gIH1cblxuICBoaG1tVG9UaW1lKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgMil9OiR7dmFsdWUuc3Vic3RyaW5nKDIsIDQpfWA7XG4gIH1cblxuICBkYXRlU3RyaW5nVG95eXl5bW1kZChkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodHlwZW9mIGQgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbSA9IC8oXFxkezR9KVstXFwvXT8oXFxkezJ9KVstXFwvXT8oXFxkezJ9KS8uZXhlYyhkKTtcbiAgICByZXR1cm4gbSA/IGAke21bMV19JHttWzJdfSR7bVszXX1gIDogbnVsbDtcbiAgfVxuXG4gIHRpbWVTdHJpbmdUb2hoX21tKHQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0eXBlb2YgdCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBtID0gLyhcXGR7Mn0pWzotXT8oXFxkezJ9KS8uZXhlYyh0KTtcbiAgICByZXR1cm4gbSA/IGAke21bMV19OiR7bVsyXX1gIDogbnVsbDtcbiAgfVxuXG4gIHN0cmluZ1RvQm9vbChzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcyAmJiBzICE9PSAnZmFsc2UnICYmIHMgIT09ICcwJyAmJiBzICE9PSAnbm8nICYmIHMgIT09ICduJztcbiAgfVxuXG4gIGNsb25lPFQgPSBhbnk+KHRvQ2xvbmU6IFQpOiBUIHtcbiAgICAvLyBjb25zb2xlLndhcm4oJysrKyBCRUdVTiBUSEUgQ0xPTkUgV0FSUyBIQVMgKysrJyk7XG4gICAgcmV0dXJuIF8uY2xvbmVEZWVwKHRvQ2xvbmUpIGFzIFQ7XG4gIH1cblxuICByZXBsYWNlS2V5c0luVGV4dCh0ZXh0OiBzdHJpbmcsIHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykucmVkdWNlKChjdXJyZW50LCBrZXkpID0+IHtcbiAgICAgIHJldHVybiBjdXJyZW50LnJlcGxhY2UoJyUnICsga2V5LCByZXBsYWNlbWVudHNba2V5XSk7XG4gICAgfSwgdGV4dCk7XG4gIH1cblxuICBnZXROZXh0TWludWV0cyhkYXRlOiBtb21lbnQuTW9tZW50ID0gbW9tZW50KCksIG1pbnV0ZXNUb1JvdW5kID0gMTUpIHtcbiAgICBkYXRlLm1pbnV0ZShNYXRoLmNlaWwoZGF0ZS5taW51dGUoKSAvIG1pbnV0ZXNUb1JvdW5kKSAqIG1pbnV0ZXNUb1JvdW5kKTtcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoJ0hIOm1tJyk7XG4gIH1cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqIEJlbG93IGFyZSBmdW5jdGlvbnMgbmVlZGVkIGZvciBnZW5lcmF0aW5nIHRoZSBoYXNoZWQgbnVtYmVyIG9uY2UgdG9rZW4sIHRha2VuIGFzIHJlcXVpcmVkXHQqXG4gICAqIERvbid0IE1lc3Mgd2l0aCB0aGVzZVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICBnZXROdW1iZXJPbmNlVmFsdWUodG9rZW46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tX3ZhbHVlID0gdGhpcy5ndWlkKCk7XG4gICAgcmV0dXJuIHJhbmRvbV92YWx1ZSArICdfJyArIGhleF9obWFjX21kNSh0b2tlbiwgcmFuZG9tX3ZhbHVlKTtcbiAgfVxuXG4gIGd1aWQoKTogYW55IHtcbiAgICBsZXQgcmFuZG9tX2hleCA9ICcnO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzMjsgaSsrKSB7XG4gICAgICByYW5kb21faGV4ICs9IHRoaXMuczQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZG9tX2hleDtcbiAgfVxuXG4gIHM0KCk6IGFueSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApXG4gICAgICAudG9TdHJpbmcoMTYpXG4gICAgICAuc3Vic3RyaW5nKDEpO1xuICB9XG5cbiAgY2FwaXRhbGlzZUZpcnN0TGV0dGVyKHdvcmQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHdvcmRbMF0udG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIGZyb21PYmplY3QoLi4uYXJnczogYW55W10pOiBhbnkge1xuICAgIGxldCBkYXRhID0gYXJncy5zaGlmdCgpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgZGF0YSAmJiBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBkYXRhID0gZGF0YVthcmdzW2luZGV4XV07XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgbW9tZW50Um91bmRNaW51dGVzKHRpbWU6IG1vbWVudC5Nb21lbnQsIHJvdW5kOiBudW1iZXIpOiBtb21lbnQuTW9tZW50IHtcbiAgICB0aW1lID0gbW9tZW50KHRpbWUpLnN0YXJ0T2YoJ21pbnV0ZXMnKTtcbiAgICBsZXQgZGlmZiA9IHRpbWUubWludXRlcygpICUgcm91bmQ7XG4gICAgaWYgKGRpZmYgIT09IDApIHtcbiAgICAgIGRpZmYgPSByb3VuZCAtIGRpZmY7XG4gICAgfVxuICAgIHJldHVybiB0aW1lLmFkZChkaWZmLCAnbWludXRlJyk7XG4gIH1cblxuICByb3VuZChkYXRlOiBhbnksIGR1cmF0aW9uOiBhbnkpIHtcbiAgICByZXR1cm4gbW9tZW50KE1hdGguY2VpbCgrZGF0ZSAvICtkdXJhdGlvbikgKiArZHVyYXRpb24pO1xuICB9XG5cbiAgaWNzRm9sZChib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmVzID0gYm9keS5zcGxpdCgvXFxyXFxuL2cpO1xuICAgIHJldHVybiBsaW5lc1xuICAgICAgLm1hcChsaW5lID0+IHtcbiAgICAgICAgbGV0IHJlcyA9ICcnO1xuICAgICAgICBjb25zdCBuID0gNzI7XG4gICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICAgICAgd2hpbGUgKGxpbmUubGVuZ3RoID4gbikge1xuICAgICAgICAgIHJlcyArPSBgJHtsaW5lLnNsaWNlKDAsIG4pfVxcclxcbmA7XG4gICAgICAgICAgbGluZSA9IGAgJHtsaW5lLnNsaWNlKG4pLnRyaW0oKX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5lLnRyaW0oKSkge1xuICAgICAgICAgIHJlcyArPSBsaW5lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJ1xcclxcbicpO1xuICB9XG5cbiAgc3BsaXRBZGRyZXNzTGluZShsaW5lOiBzdHJpbmcsIGxlbjogbnVtYmVyKTogeyBsaW5lOiBzdHJpbmc7IHJlc2lkdWU6IHN0cmluZyB9IHtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICBsaW5lOiBsaW5lLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksXG4gICAgICByZXNpZHVlOiAnJ1xuICAgIH07XG4gICAgaWYgKHJlcy5saW5lLmxlbmd0aCA+IGxlbikge1xuICAgICAgbGV0IGkgPSByZXMubGluZS5zbGljZSgwLCBsZW4pLmxhc3RJbmRleE9mKCcsJyk7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgcmVzLnJlc2lkdWUgPSByZXMubGluZS5zbGljZShpICsgMSkudHJpbSgpO1xuICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGkpLnRyaW0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkgPSByZXMubGluZS5zbGljZSgwLCBsZW4pLmxhc3RJbmRleE9mKCcgJyk7XG4gICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgIHJlcy5yZXNpZHVlID0gcmVzLmxpbmUuc2xpY2UoaSArIDEpLnRyaW0oKTtcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcy5yZXNpZHVlID0gcmVzLmxpbmUuc2xpY2UobGVuKTtcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGRheXNCZXR3ZWVuKHN0YXJ0OiBtb21lbnQuTW9tZW50LCBlbmQ6IG1vbWVudC5Nb21lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBlbmQuZGlmZihzdGFydCwgJ2RheXMnKTtcbiAgfVxuXG4gIG1hcFByb21pc2U8VCA9IGFueSwgUiA9IGFueT4oXG4gICAgYTogVFtdLFxuICAgIGY6ICh2YWw6IFQsIGluZGV4OiBudW1iZXIpID0+IFIgfCBQcm9taXNlPFI+LFxuICAgIG1heD86IG51bWJlclxuICApOiBQcm9taXNlPFJbXT4ge1xuICAgIGNvbnN0IGl0ID0gYVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgY29uc3QgcmVzdWx0OiBSW10gPSBbXTtcbiAgICBjb25zdCBidWZmZXI6IFByb21pc2U8Uj5bXSA9IFtdO1xuICAgIGxldCBpID0gMDtcbiAgICBjb25zdCBuZXh0ZiA9ICgpOiBQcm9taXNlPFI+ID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBpdC5uZXh0KCk7XG4gICAgICBpZiAobmV4dC5kb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4ID0gaSsrO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmKG5leHQudmFsdWUsIGluZGV4KSkudGhlbih2YWwgPT4ge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gdmFsO1xuICAgICAgICByZXR1cm4gbmV4dGYoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgd2hpbGUgKCFtYXggfHwgYnVmZmVyLmxlbmd0aCA8PSBtYXgpIHtcbiAgICAgIGNvbnN0IG4gPSBuZXh0ZigpO1xuICAgICAgaWYgKG4pIHtcbiAgICAgICAgYnVmZmVyLnB1c2gobik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGJ1ZmZlcikudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgbWFwU2VyaWVzUHJvbWlzZTxUID0gYW55LCBSID0gYW55PihcbiAgICBhOiBUW10sXG4gICAgZjogKHZhbDogVCwgaW5kZXg6IG51bWJlcikgPT4gUiB8IFByb21pc2U8Uj5cbiAgKTogUHJvbWlzZTxSW10+IHtcbiAgICByZXR1cm4gdGhpcy5tYXBQcm9taXNlKGEsIGYsIDEpO1xuICB9XG5cbiAgb2JqMnF1ZXJ5U3RyaW5nKG9iajogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gXy5yZWR1Y2UoXG4gICAgICBvYmosXG4gICAgICAoYSwgdiwgaykgPT4ge1xuICAgICAgICBpZiAoYSAhPT0gJycpIHtcbiAgICAgICAgICBhICs9ICcmJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7YX0ke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YDtcbiAgICAgIH0sXG4gICAgICAnJ1xuICAgICk7XG4gIH1cblxuICBzdHJpcFB1bmN0dWF0aW9uKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHMucmVwbGFjZSgvW15hLXpBLVowLTlcXHNdL2csICcnKTtcbiAgfVxuXG4gIHJlcGxhY2VBbGwoaGF5c3RhY2s6IHN0cmluZywgbmVlZGxlOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBoYXlzdGFjayA/IGhheXN0YWNrLnJlcGxhY2UobmV3IFJlZ0V4cChuZWVkbGUsICdnJyksIHJlcGxhY2VtZW50KSA6IG51bGw7XG4gIH1cblxuICBkYXRlVGltZShzYWJzRGF0ZTogc3RyaW5nLCBzYWJzVGltZTogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCB0ZW1wRGF0ZSA9IHNhYnNEYXRlLm1hdGNoKC8uezEsMn0vZyk7IC8vIHNwbGl0cyBldmVyeSAyIGNoYXJhY3RlcnNcbiAgICBjb25zdCB0ZW1wVGltZSA9IHNhYnNUaW1lLm1hdGNoKC8uezEsMn0vZyk7XG5cbiAgICBjb25zdCBuZXdTdHIgPVxuICAgICAgJzIwJyArXG4gICAgICB0ZW1wRGF0ZVswXSArXG4gICAgICAnLScgK1xuICAgICAgdGVtcERhdGVbMV0gK1xuICAgICAgJy0nICtcbiAgICAgIHRlbXBEYXRlWzJdICtcbiAgICAgICdUJyArXG4gICAgICB0ZW1wVGltZVswXSArXG4gICAgICAnOicgK1xuICAgICAgdGVtcFRpbWVbMV0gK1xuICAgICAgJzowMCc7XG4gICAgcmV0dXJuIG5ld1N0cjtcbiAgfVxuXG4gIGFsdGVybmF0ZUpTT05TdHJpbmdpZnkoanNvbk9iamVjdDogYW55KTogc3RyaW5nIHtcbiAgICBsZXQganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb25PYmplY3QpO1xuICAgIGpzb25TdHJpbmcgPSBqc29uU3RyaW5nLnJlcGxhY2UoL1wiL2csICdgJyk7XG4gICAgcmV0dXJuIGpzb25TdHJpbmc7XG4gIH1cblxuICAvLyBDb252ZXJ0IG9iamVjdCB0byBhcnJheVxuICBDb252ZXJ0T2JqZWN0VG9BcnJheShvYmplY3Q6IG9iamVjdCk6IGFueVtdIHtcbiAgICBsZXQgYXJyYXkgPSBfLnZhbHVlcyhvYmplY3QpO1xuICAgIGFycmF5ID0gXy5mbGF0dGVuKGFycmF5KTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICBhZGREYXkoZGF0ZVN0cnVjdDogTmdiRGF0ZVN0cnVjdCk6IGFueSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHJ1Y3QueWVhciwgZGF0ZVN0cnVjdC5tb250aCAtIDEsIGRhdGVTdHJ1Y3QuZGF5ICsgMSk7XG4gICAgY29uc3QgcmV0RGF0ZSA9IHtcbiAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCkgKyAxLFxuICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxuICAgIH07XG4gICAgLy8vLyBjb25zb2xlLmxvZyhyZXREYXRlKTtcbiAgICAvLy8vIGNvbnNvbGUubG9nKGRhdGUpO1xuICAgIHJldHVybiByZXREYXRlO1xuICB9XG5cbiAgaGFzaENvZGUodG9Db2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBoYXNoID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9Db2RlLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBjaGFyID0gdG9Db2RlLmNoYXJDb2RlQXQoaSk7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcbiAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1iaXR3aXNlXG4gICAgICBoYXNoID0gaGFzaCAmIGhhc2g7XG4gICAgfVxuICAgIHJldHVybiBoYXNoLnRvU3RyaW5nKCk7XG4gIH1cblxuICBNTWRkeXlUb05nYihkYXRlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5tb21lbnRUb05nRGF0ZShtb21lbnQoZGF0ZSwgQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKSk7XG4gIH1cblxuICBzZWxlY3RlZENoaWxkcmVuVHJhdmVsbGVycyhzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLCB0eXBlOiBTZXJ2aWNlVHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWR1bHRzIGFuZCBjaGlsZHJlbi4gc28gYWx3YXlzIG1hcmsgYXMgYWR1bHRzLlxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4gdHJhdmVsbGVyLmlzQ2hpbGQpO1xuICB9XG5cbiAgc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLCB0eXBlOiBTZXJ2aWNlVHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWR1bHRzIGFuZCBjaGlsZHJlbi4gc28gYWx3YXlzIG1hcmsgYXMgYWR1bHRzLlxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxuICAgICAgICByZXR1cm4geyBhZHVsdHM6IHRyYXZlbGxlcnMsIGNoaWxkcmVuOiBbXSwgaW5mYW50czogW10gfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cmF2ZWxsZXJzLnJlZHVjZShcbiAgICAgICAgICAoXG4gICAgICAgICAgICBhY2N1bToge1xuICAgICAgICAgICAgICBhZHVsdHM6IFRyYXZlbGxlcltdO1xuICAgICAgICAgICAgICBjaGlsZHJlbjogVHJhdmVsbGVyW107XG4gICAgICAgICAgICAgIGluZmFudHM6IFRyYXZlbGxlcltdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRyYXZlbGxlcjogVHJhdmVsbGVyXG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBpZiAodHJhdmVsbGVyLmlzQ2hpbGQpIHtcbiAgICAgICAgICAgICAgaWYgKHRyYXZlbGxlci5pc0luZmFudCkge1xuICAgICAgICAgICAgICAgIGFjY3VtLmluZmFudHMucHVzaCh0cmF2ZWxsZXIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjY3VtLmNoaWxkcmVuLnB1c2godHJhdmVsbGVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWNjdW0uYWR1bHRzLnB1c2godHJhdmVsbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkdWx0czogW10sXG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICBpbmZhbnRzOiBbXVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gIH1cbiAgc2VsZWN0ZWRBZHVsdFRyYXZlbGxlcnMoc2VsZWN0ZWRUcmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSwgdHlwZTogU2VydmljZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGRvIG5vdCBoYXZlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGFkdWx0cyBhbmQgY2hpbGRyZW4uIHNvIGFsd2F5cyBtYXJrIGFzIGFkdWx0cy5cbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkVHJhdmVsbGVycztcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+ICF0cmF2ZWxsZXIuaXNDaGlsZCAmJiAhdHJhdmVsbGVyLmlzSW5mYW50XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzQ2hpbGQodHJhdmVsbGVyOiBUcmF2ZWxsZXIgfCBEYXRlLCBtYXhBZ2U6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0cmF2ZWxsZXIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCBhZHVsdERhdGUgPSBtb21lbnQoKS5hZGQoLW1heEFnZSwgJ3llYXJzJyk7XG4gICAgICByZXR1cm4gYWR1bHREYXRlLmlzQmVmb3JlKG1vbWVudCh0cmF2ZWxsZXIsIEJhc2VIZWxwZXJSb3V0aW5lcy5JU09fREFUQV9GT1JNQVQpLCAnZGF5Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cmF2ZWxsZXIuaXNDaGlsZDtcbiAgICB9XG4gIH1cblxuICBpc0NoaWxkRmxpZ2h0KHRyYXZlbGxlcjogVHJhdmVsbGVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XG4gIH1cblxuICBpc0NoaWxkUmFpbCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcbiAgfVxuXG4gIGlzQ2hpbGRFdXJvc3Rhcih0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XG4gIH1cblxuICB1bmlxQnkoYXJyYXk6IGFueVtdLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIF8udW5pcUJ5KGFycmF5LCB2YWx1ZSk7XG4gIH1cblxuICBpc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHRyYXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBSQUlMX01BWF9DSElMRF9BR0VfWUVBUlMpO1xuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcbiAgICAgIC8vICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBDT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuTG91bmdlOlxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIExPVU5HRVNfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc0luZmFudCh0cmF2ZWxsZXI6IFRyYXZlbGxlciB8IERhdGUsIHRyYXZlbFR5cGU6IFNlcnZpY2VUeXBlKSB7XG4gICAgc3dpdGNoICh0cmF2ZWxUeXBlKSB7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBGTElHSFRfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIFJBSUxfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcbiAgICAgIC8vICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBDT0FDSF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyk7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBMT1VOR0VTX01BWF9JTkZBTlRfQUdFX1lFQVJTKTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldEFnZVR5cGUodHJhdmVsbGVyOiBUcmF2ZWxsZXIsIHRyYXZlbFR5cGU6IFNlcnZpY2VUeXBlKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pc0NoaWxkKHRyYXZlbGxlciwgdHJhdmVsVHlwZSkgPyAnQycgOiAnQSc7XG4gIH1cblxuICBnZXRNYXhDaGlsZEFnZSh0eXBlOiBTZXJ2aWNlVHlwZSk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXG4gICAgICAgICAgLmFkZCgtUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTICsgMSwgJ3llYXJzJylcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XG4gICAgICAvLyBjYXNlIFNlcnZpY2VUeXBlLkVVUk9TVEFSOlxuICAgICAgLy8gIHJldHVybiBtb21lbnQoKS5hZGQoLUVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKS5mb3JtYXQoSGVscGVycy5NTUREWVlfREFURSk7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxuICAgICAgICByZXR1cm4gbW9tZW50KClcbiAgICAgICAgICAuYWRkKC1DT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTICsgMSwgJ3llYXJzJylcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXG4gICAgICAgICAgLmFkZCgtTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTICsgMSwgJ3llYXJzJylcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGVmYXVsdEFkdWx0QWdlKHR5cGU6IFNlcnZpY2VUeXBlKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxuICAgICAgICByZXR1cm4gbW9tZW50KClcbiAgICAgICAgICAuYWRkKC1GTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyAtIDEwLCAneWVhcnMnKVxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXG4gICAgICAgICAgLmFkZCgtUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcbiAgICAgIC8vICByZXR1cm4gbW9tZW50KCkuYWRkKC1FVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XG4gICAgICAgIHJldHVybiBtb21lbnQoKVxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXG4gICAgICAgICAgLmFkZCgtTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxuICAgICAgICAvLyBUaGVzZSB0eXBlcyBkbyBub3QgaGF2ZSBjaGlsZCBwbGFjZXMgc29cbiAgICAgICAgcmV0dXJuIG1vbWVudCgpLmFkZCgtMTgsICd5ZWFycycpLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xuICAgIH1cbiAgICByZXR1cm4gbW9tZW50KCkuYWRkKC0xOCwgJ3llYXJzJykuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XG4gIH1cblxuICB0cmFuc2Zvcm0oYXJyYXk6IGFueVtdLCBjYWxsYmFjazogXy5NZW1vVm9pZEFycmF5SXRlcmF0b3I8YW55LCBhbnlbXT4sIGFjYzogYW55KTogYW55W10ge1xuICAgIHJldHVybiBfLnRyYW5zZm9ybShhcnJheSwgY2FsbGJhY2ssIGFjYyk7XG4gIH1cblxuICBhcnJheVRvT2JqZWN0PFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IGFueSB9PihhcnJheTogVFtdLCBmaWVsZDogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBUIH0ge1xuICAgIHJldHVybiBhcnJheVxuICAgICAgLmZpbHRlcigoZGF0YTogVCkgPT4gISFkYXRhKVxuICAgICAgLnJlZHVjZSgoY29uZmlnczogeyBba2V5OiBzdHJpbmddOiBUIH0sIGNvbmZpZ0l0ZW06IFQpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZ0l0ZW0gJiYgY29uZmlnSXRlbVtmaWVsZF0pIHtcbiAgICAgICAgICBjb25maWdzW2NvbmZpZ0l0ZW1bZmllbGRdXSA9IGNvbmZpZ0l0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmZpZ3M7XG4gICAgICB9LCB7fSk7XG4gIH1cblxuICBzZXRGaWVsZEluT2JqZWN0KG9iajogUmVjb3JkPHN0cmluZywgYW55PiwgZmllbGRzOiBzdHJpbmdbXSwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWVsZCcpO1xuICAgIH1cbiAgICBpZiAoIW9iaikge1xuICAgICAgb2JqID0ge307XG4gICAgfVxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBvYmpbZmllbGRzWzBdXSA9IG9ialtmaWVsZHNbMF1dIHx8IFtdO1xuICAgICAgb2JqW2ZpZWxkc1swXV0ucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpZWxkOiBzdHJpbmcgPSBmaWVsZHNbMF07XG4gICAgICBvYmpbZmllbGRdID0gdGhpcy5zZXRGaWVsZEluT2JqZWN0KG9ialtmaWVsZF0sIGZpZWxkcy5zbGljZSgxKSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBhcnJheVRvT2JqZWN0QXJyYXk8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0sIFEgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IGFueSB9PihcbiAgICBhcnJheTogVFtdLFxuICAgIGZpZWxkczogKHN0cmluZyB8IHN0cmluZ1tdKVtdXG4gICk6IFEge1xuICAgIHJldHVybiBhcnJheVxuICAgICAgLmZpbHRlcigoZGF0YTogVCkgPT4gISFkYXRhKVxuICAgICAgLnJlZHVjZSgoY29uZmlnczogeyBba2V5OiBzdHJpbmddOiBUW10gfSwgY29uZmlnSXRlbTogVCkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZFZhbHVlczogc3RyaW5nW10gPSBmaWVsZHMucmVkdWNlPHN0cmluZ1tdPihcbiAgICAgICAgICAoYWNjdW06IHN0cmluZ1tdLCBmaWVsZDoga2V5b2YgVCB8IChrZXlvZiBUKVtdKTogc3RyaW5nW10gPT4ge1xuICAgICAgICAgICAgbGV0IGZldGNoVmFsdWU6IHN0cmluZyA9IEFycmF5LmlzQXJyYXkoZmllbGQpXG4gICAgICAgICAgICAgID8gZmllbGRcbiAgICAgICAgICAgICAgICAgIC5tYXAoKGtleToga2V5b2YgVCkgPT4gdGhpcy5maWVsZEZyb21PYmplY3QoY29uZmlnSXRlbSwga2V5IGFzIHN0cmluZykpXG4gICAgICAgICAgICAgICAgICAuam9pbignXycpXG4gICAgICAgICAgICAgIDogdGhpcy5maWVsZEZyb21PYmplY3QoY29uZmlnSXRlbSwgZmllbGQgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgaWYgKGZldGNoVmFsdWUgPT09ICdBUEFSVE1FTlQnKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hWYWx1ZSA9IFNlcnZpY2VUeXBlLkxvbmdTdGF5cztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjY3VtICYmIGZldGNoVmFsdWUpIHtcbiAgICAgICAgICAgICAgYWNjdW0ucHVzaChmZXRjaFZhbHVlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgICAgICBpZiAoY29uZmlnSXRlbSAmJiBmaWVsZFZhbHVlcykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNldEZpZWxkSW5PYmplY3QoY29uZmlncywgZmllbGRWYWx1ZXMsIGNvbmZpZ0l0ZW0pO1xuICAgICAgICB9XG4gICAgICB9LCB7fSk7XG4gIH1cblxuICBnZXRUZXJtaW5hbHMoYWlycG9ydDogQWlycG9ydCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYWlycG9ydC50ZXJtaW5hbHM7XG4gIH1cblxuICBmaWVsZEZyb21PYmplY3Q8VD4ob2JqOiBvYmplY3QsIGZpZWxkczogc3RyaW5nIHwgc3RyaW5nW10pOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KGZpZWxkcykgPyBmaWVsZHMgOiAoZmllbGRzIHx8ICcnKS5zcGxpdCgnLicpKS5yZWR1Y2UoXG4gICAgICAoY3VycmVudDogUmVjb3JkPHN0cmluZywgYW55PiwgZmllbGQxOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtmaWVsZDFdKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRbZmllbGQxXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG4gICAgICBvYmpcbiAgICApO1xuICB9XG5cbiAgbWFwRmllbGRGcm9tT2JqZWN0PEsgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIFQ+KGZpZWxkOiBLKSB7XG4gICAgcmV0dXJuIChvYmo6IFJlY29yZDxLLCBhbnk+KTogVCA9PiB7XG4gICAgICByZXR1cm4gb2JqW2ZpZWxkXTtcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlTnVsbHM8VD4ocXVlcnk6IFQpOiBUIHtcbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxuICAgIGlmIChtb21lbnQuaXNNb21lbnQocXVlcnkpKSB7XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5KSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKChxdWVyeSBhcyB1bmtub3duIGFzIEFycmF5PFVucGFja2VkPFQ+PilcbiAgICAgICAgICAubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZU51bGxzKGl0ZW0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigoaXRlbTE6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICEhaXRlbTE7XG4gICAgICAgICAgfSkgYXMgdW5rbm93biBhcyBUKSB8fCBudWxsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGFjY3VtOiBULCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoa2V5WzBdICE9PSAnXycpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IChxdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlbW92ZU51bGxzKHZhbHVlKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZGF0YSAhPT0gbnVsbCAmJiBkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gJ251bGwnKSB8fFxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgKGFjY3VtIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV0gPSBkYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LCB7fSBhcyBUKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cbiAgfVxuXG4gIGdldFRyYXZlbGxlcnNJZCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSwgYm9ib0lkPzogc3RyaW5nKTogUmVjZW50U2VhcmNoVHJhdmVsbGVyW10ge1xuICAgIGlmICh0cmF2ZWxsZXJzKSB7XG4gICAgICByZXR1cm4gdHJhdmVsbGVycy5yZWR1Y2UoXG4gICAgICAgIChwcmV2aW91c1ZhbHVlOiBSZWNlbnRTZWFyY2hUcmF2ZWxsZXJbXSwgY3VycmVudFZhbHVlOiBUcmF2ZWxsZXIsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGlkeCA9PT0gMFxuICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWQ6IGN1cnJlbnRWYWx1ZS5pZCxcbiAgICAgICAgICAgICAgICAgIGd1ZXN0OiBjdXJyZW50VmFsdWUuZ3Vlc3QsXG4gICAgICAgICAgICAgICAgICBpc0ludm9rZWQ6IGJvYm9JZCA9PT0gY3VycmVudFZhbHVlLmlkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAuLi5wcmV2aW91c1ZhbHVlLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlkOiBjdXJyZW50VmFsdWUuaWQsXG4gICAgICAgICAgICAgICAgICBndWVzdDogY3VycmVudFZhbHVlLmd1ZXN0LFxuICAgICAgICAgICAgICAgICAgaXNJbnZva2VkOiBib2JvSWQgPT09IGN1cnJlbnRWYWx1ZS5pZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGxvb3Agb3ZlciB0aGUgcXVlcnkgb2JqZWN0IHBhcmFtIGFuZCBjb252ZXJ0IGFueSBtb21lbnQgZGF0ZSBvYmplY3RzIHRvIGRhdGUtdGltZSBzdHJpbmdzXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gZGVidWdcbiAgICovXG4gIHNhbml0aXplTW9tZW50RGF0ZXMocXVlcnk6IGFueSwgZGVidWcgPSBmYWxzZSk6IGFueSB7XG4gICAgY29uc3Qgc2FuaXRpemVkUXVlcnkgPSB7IC4uLnF1ZXJ5IH07XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2FuaXRpemVkUXVlcnkpKSB7XG4gICAgICBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSkge1xuICAgICAgICBzYW5pdGl6ZWRRdWVyeVtrZXldID0gc2FuaXRpemVkUXVlcnlba2V5XS50b0lTT1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCctLSBzYW5pdGl6ZU1vbWVudERhdGVzKCkgY2FsbGVkIC0tJyk7XG4gICAgICBjb25zb2xlLmxvZygnb3JpZ2luYWwgcXVlcnk6ICcsIHF1ZXJ5KTtcbiAgICAgIGNvbnNvbGUubG9nKCdzYW5pdGl6ZWQgcXVlcnk6ICcsIHNhbml0aXplZFF1ZXJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIHNhbml0aXplZFF1ZXJ5O1xuICB9XG5cbiAgdG9TdHJpbmdzPFQ+KHRvRm9ybWF0OiBULCBzY2hlbWE6IFNjaGVtYSk6IFQge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzY2hlbWEucHJvcGVydGllcyB8fCB7fSkucmVkdWNlKFxuICAgICAgKGN1cnJlbnRWYWx1ZTogVCwgW2tleSwgdmFsdWVdOiBbc3RyaW5nLCBTY2hlbWFdKTogVCA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5fZm9ybWF0VmFsdWUoXG4gICAgICAgICAgdG9Gb3JtYXRba2V5IGFzIGtleW9mIFRdLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIChzY2hlbWEucmVxdWlyZWQgfHwgW10pLmluY2x1ZGVzKGtleSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobmV3VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBjdXJyZW50VmFsdWVba2V5IGFzIGtleW9mIFRdID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICB7fSBhcyBUXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Zvcm1hdFZhbHVlKHZhbHVlOiBhbnksIHNjaGVtYTogU2NoZW1hLCBpc1JlcXVpcmVkOiBib29sZWFuKTogYW55IHtcbiAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG4gICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgICAgY29uc3QgdG1wID0gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4odG1wKSA/IChpc1JlcXVpcmVkID8gMCA6IG51bGwpIDogdG1wO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgaWYgKChzY2hlbWEuZm9ybWF0ID09PSAnZGF0ZS10aW1lJyB8fCBzY2hlbWEuZm9ybWF0ID09PSAnZGF0ZScpICYmIHZhbHVlPy55ZWFyKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0SXNvRGF0ZSh0aGlzLm5nRGF0ZVRvTW9tZW50KHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG1wMSA9IHZhbHVlID8gdmFsdWUudG9TdHJpbmcoKSA6IG51bGw7XG4gICAgICAgIHJldHVybiB0bXAxICYmIHRtcDEubGVuZ3RoID4gMCA/IHRtcDEgOiBpc1JlcXVpcmVkID8gJycgOiBudWxsO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuIHZhbHVlID8gdGhpcy50b1N0cmluZ3ModmFsdWUsIHNjaGVtYSkgOiBpc1JlcXVpcmVkID8ge30gOiBudWxsO1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgICByZXR1cm4gdmFsdWU7IC8vIFRPRE8gd3JpdGUgYXJyYXkgdHJhbnNsYXRpb25cbiAgICAgIC8vIGNhc2UgJ2RhdGUnOlxuICAgICAgLy8gY2FzZSAnZGF0ZS10aW1lJzpcbiAgICAgIC8vICAgaWYgKHZhbHVlLnllYXIpIHtcbiAgICAgIC8vICAgICByZXR1cm4gdGhpcy5mb3JtYXRJc29EYXRlKHRoaXMubmdEYXRlVG9Nb21lbnQodmFsdWUpKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICBicmVhaztcbiAgICAgIC8vIGNhc2UgJ3Bhc3Nwb3J0JzpcbiAgICAgIC8vICAgcmV0dXJuIHZhbHVlID8gdGhpcy50b1N0cmluZ3ModmFsdWUsIHNjaGVtYSkgOiBpc1JlcXVpcmVkID8ge30gOiBudWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGArKysgdW5rbm93biBzY2hlbWEgdHlwZSAke3NjaGVtYS50eXBlfSB8IHJldHVybmluZyB2YWx1ZSBhcyBpcyArKytgKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG1ha2VUaW1lV2luZG93KGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gZGF0ZVRpbWUuY2xvbmUoKS5hZGQoc3RhcnQsICdob3VyJyk7XG4gICAgY29uc3QgZW5kVGltZSA9IGRhdGVUaW1lLmNsb25lKCkuYWRkKGVuZCwgJ2hvdXInKTtcblxuICAgIHJldHVybiB0aGlzLmZvcm1hdFRpbWUoc3RhcnRUaW1lKSArICctJyArIHRoaXMuZm9ybWF0VGltZShlbmRUaW1lKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZUR1cmF0aW9uSW5Ib3Vycyh0aW1lUmFuZ2U6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgcGFydHMgPSB0aW1lUmFuZ2Uuc3BsaXQoJy0nKTtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBwYXJ0c1swXTtcbiAgICBjb25zdCBlbmRUaW1lID0gcGFydHNbMV07XG5cbiAgICBjb25zdCBzdGFydEhvdXJzID0gcGFyc2VJbnQoc3RhcnRUaW1lLnN1YnN0cmluZygwLCAyKSwgMTApO1xuICAgIGNvbnN0IHN0YXJ0TWludXRlcyA9IHBhcnNlSW50KHN0YXJ0VGltZS5zdWJzdHJpbmcoMiwgNCksIDEwKTtcbiAgICBjb25zdCBlbmRIb3VycyA9IHBhcnNlSW50KGVuZFRpbWUuc3Vic3RyaW5nKDAsIDIpLCAxMCk7XG4gICAgY29uc3QgZW5kTWludXRlcyA9IHBhcnNlSW50KGVuZFRpbWUuc3Vic3RyaW5nKDIsIDQpLCAxMCk7XG5cbiAgICBsZXQgdG90YWxIb3VycyA9IDA7XG4gICAgbGV0IHRvdGFsTWludXRlcyA9IDA7XG5cbiAgICBpZiAoZW5kSG91cnMgPCBzdGFydEhvdXJzIHx8IChlbmRIb3VycyA9PT0gc3RhcnRIb3VycyAmJiBlbmRNaW51dGVzIDwgc3RhcnRNaW51dGVzKSkge1xuICAgICAgdG90YWxIb3VycyA9IDI0IC0gc3RhcnRIb3VycyArIGVuZEhvdXJzO1xuICAgICAgdG90YWxNaW51dGVzID0gNjAgLSBzdGFydE1pbnV0ZXMgKyBlbmRNaW51dGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3RhbEhvdXJzID0gZW5kSG91cnMgLSBzdGFydEhvdXJzO1xuICAgICAgdG90YWxNaW51dGVzID0gZW5kTWludXRlcyAtIHN0YXJ0TWludXRlcztcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRvdGFsIG1pbnV0ZXMgdG8gZnJhY3Rpb24gb2YgYW4gaG91clxuICAgIHRvdGFsSG91cnMgKz0gdG90YWxNaW51dGVzIC8gNjA7XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcih0b3RhbEhvdXJzIC8gMik7XG4gIH1cblxuICBpblJhbmdlKHRvY2hlY2s6IG51bWJlciwgcmFuZ2U6IE1pbk1heCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0b2NoZWNrID49IHJhbmdlLm1pbiAmJiB0b2NoZWNrIDw9IHJhbmdlLm1heDtcbiAgfVxuXG4gIG1ha2VVc2Vycyh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSk6IFVzZXJQYXNzZW5nZXJUeXBlSW5wdXRbXSB7XG4gICAgcmV0dXJuIHRyYXZlbGxlcnMubWFwKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IFVzZXJQYXNzZW5nZXJUeXBlSW5wdXQgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHRyYXZlbGxlci5pZCxcbiAgICAgICAgcGFzc2VuZ2VyVHlwZTogdHJhdmVsbGVyLmlzQ2hpbGRcbiAgICAgICAgICA/IFBhc3NlbmdlclR5cGUuQ2hpbGRcbiAgICAgICAgICA6IHRyYXZlbGxlci5pc0luZmFudFxuICAgICAgICAgID8gUGFzc2VuZ2VyVHlwZS5JbmZhbnRcbiAgICAgICAgICA6IFBhc3NlbmdlclR5cGUuQWR1bHRcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBtYWtlTW9tZW50RGF5VGltZShhZGREYXk/OiBudW1iZXIsIGhoPzogbnVtYmVyLCBtPzogbnVtYmVyKSB7XG4gICAgY29uc3QgZHQgPSBtb21lbnQoKTtcblxuICAgIGlmIChhZGREYXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZHQuYWRkKGFkZERheSwgJ2RheScpO1xuICAgIH1cblxuICAgIGlmIChoaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkdC5zZXQoJ2hvdXJzJywgaGgpO1xuICAgIH1cblxuICAgIGlmIChtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGR0LnNldCgnbWludXRlcycsIG0pO1xuICAgIH1cblxuICAgIHJldHVybiBkdDtcbiAgfVxuXG4gIHNhbmF0aXplUmV0dXJuczxUPihkZWZhdWx0czogVCwgc3VwcGxpZWREYXRhOiBQYXJ0aWFsPFQ+LCBtb21lbnRGaWVsZHM/OiAoa2V5b2YgVClbXSk6IFQge1xuICAgIGNvbnN0IGNvbWJpbmVkOiBUID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIHN1cHBsaWVkRGF0YSk7XG4gICAgcmV0dXJuIChtb21lbnRGaWVsZHMgfHwgW10pLnJlZHVjZSgoY3VycmVudDogVCwgbmV4dDoga2V5b2YgVCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSAoY3VycmVudCBhcyBhbnkpW25leHRdO1xuICAgICAgKGN1cnJlbnQgYXMgYW55KVtuZXh0XSA9ICF2YWx1ZVxuICAgICAgICA/IG1vbWVudCgpXG4gICAgICAgIDogdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICA/IG1vbWVudCh2YWx1ZSlcbiAgICAgICAgOiB2YWx1ZTtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0sIGNvbWJpbmVkKTtcbiAgfVxuXG4gIC8vIG1pSXNWYWxpZCh0b0NoZWNrOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSwgaXNBZ2VudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIC8vICAgcmV0dXJuIChcbiAgLy8gICAgIHRvQ2hlY2subGVuZ3RoID09PSAwIHx8XG4gIC8vICAgICAhIXRvQ2hlY2suZmluZCgobWlJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcbiAgLy8gICAgICAgcmV0dXJuIG1pSXRlbS5pc1ZhbGlkKCkgfHwgKG1pSXRlbS5hZ2VudE9ubHkgJiYgIWlzQWdlbnQpO1xuICAvLyAgICAgfSlcbiAgLy8gICApO1xuICAvLyB9XG5cbiAgLy8gY2hlY2tGb3JEZWZhdWx0TWlWYWx1ZShtaVBlcjogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10sIGlzSW52b2tlZDogYm9vbGVhbikge1xuICAvLyAgIHJldHVybiBtaVBlci5maW5kKG1pID0+XG4gIC8vICAgICAobWkuaGlkZVRha2VWYWx1ZUZyb21Vc2VyRGVmYXVsdCB8fCBtaS5oaWRlVGFrZVZhbHVlRnJvbUJvb2tlckRlZmF1bHQpICYmIGlzSW52b2tlZFxuICAvLyAgICAgICA/ICFtaS5pbnZva2VkVXNlckRlZmF1bHRWYWx1ZVxuICAvLyAgICAgICA6ICFtaS5kZWZhdWx0VmFsdWVcbiAgLy8gICApO1xuICAvLyB9XG5cbiAgLy8gY2hlY2tGb3JVc2VyRGVmYXVsdFZhbHVlKFxuICAvLyAgIHVzZXJNaVBlcjoge1xuICAvLyAgICAgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdO1xuICAvLyAgICAgc3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvPzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlO1xuICAvLyAgIH1bXSxcbiAgLy8gICBpc0ludm9rZWQ6IGJvb2xlYW5cbiAgLy8gKSB7XG4gIC8vICAgcmV0dXJuIHVzZXJNaVBlci5maW5kKHVzZXIgPT4gdGhpcy5jaGVja0ZvckRlZmF1bHRNaVZhbHVlKHVzZXIubWFuYWdlbWVudEluZm8sIGlzSW52b2tlZCkpO1xuICAvLyB9XG5cbiAgLy8gaXNNaVZhbGlkKFxuICAvLyAgIG1pUGVySXRlbTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10sXG4gIC8vICAgbWlQZXJVc2VyOiB7XG4gIC8vICAgICBba2V5OiBzdHJpbmddOiB7XG4gIC8vICAgICAgIG1hbmFnZW1lbnRJbmZvOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXTtcbiAgLy8gICAgIH07XG4gIC8vICAgfSxcbiAgLy8gICBtaVBlckd1ZXN0OiB7XG4gIC8vICAgICBba2V5OiBzdHJpbmddOiB7XG4gIC8vICAgICAgIG1hbmFnZW1lbnRJbmZvOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXTtcbiAgLy8gICAgIH07XG4gIC8vICAgfSxcbiAgLy8gICBpc0FnZW50OiBib29sZWFuXG4gIC8vICk6IGJvb2xlYW4ge1xuICAvLyAgIGNvbnN0IHVzZXJNaXMgPSBPYmplY3QudmFsdWVzKG1pUGVyVXNlciB8fCB7fSk7XG4gIC8vICAgY29uc3QgZ3Vlc3RNaXMgPSBPYmplY3QudmFsdWVzKG1pUGVyR3Vlc3QgfHwge30pO1xuICAvLyAgIHJldHVybiAoXG4gIC8vICAgICB0aGlzLm1pSXNWYWxpZChtaVBlckl0ZW0sIGlzQWdlbnQpICYmXG4gIC8vICAgICAodXNlck1pcy5sZW5ndGggPT09IDAgfHxcbiAgLy8gICAgICAgISF1c2VyTWlzLmZpbmQoKHVzZXJNaXMxOiB7IG1hbmFnZW1lbnRJbmZvOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSB9KSA9PiB7XG4gIC8vICAgICAgICAgcmV0dXJuIHRoaXMubWlJc1ZhbGlkKHVzZXJNaXMxLm1hbmFnZW1lbnRJbmZvLCBpc0FnZW50KTtcbiAgLy8gICAgICAgfSkpICYmXG4gIC8vICAgICAoZ3Vlc3RNaXMubGVuZ3RoID09PSAwIHx8XG4gIC8vICAgICAgICEhZ3Vlc3RNaXMuZmluZCgodXNlck1pczE6IHsgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdIH0pID0+IHtcbiAgLy8gICAgICAgICByZXR1cm4gdGhpcy5taUlzVmFsaWQodXNlck1pczEubWFuYWdlbWVudEluZm8sIGlzQWdlbnQpO1xuICAvLyAgICAgICB9KSlcbiAgLy8gICApO1xuICAvLyB9XG5cbiAgLy8gbmVlZHNNaShiYXNrZXQ6IEJhc2tldERldGFpbHMsIG5lZWRzVG9WaWV3TWk6IGJvb2xlYW4sIGlzQWdlbnQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgLy8gICByZXR1cm4gKFxuICAvLyAgICAgYmFza2V0LmJhc2tldEluZm9NaURldGFpbHMubGVuZ3RoID4gMCAmJlxuICAvLyAgICAgKG5lZWRzVG9WaWV3TWkgfHxcbiAgLy8gICAgICAgIWJhc2tldC5iYXNrZXRJbmZvTWlEZXRhaWxzLmZpbmQoKG1pRGV0YWlsOiBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm8pOiBib29sZWFuID0+IHtcbiAgLy8gICAgICAgICByZXR1cm4gdGhpcy5pc01pVmFsaWQoXG4gIC8vICAgICAgICAgICBtaURldGFpbC5taVBlckl0ZW0sXG4gIC8vICAgICAgICAgICBtaURldGFpbC5taVBlclVzZXIsXG4gIC8vICAgICAgICAgICBtaURldGFpbC5taVBlckd1ZXN0LFxuICAvLyAgICAgICAgICAgaXNBZ2VudFxuICAvLyAgICAgICAgICk7XG4gIC8vICAgICAgIH0pKVxuICAvLyAgICk7XG4gIC8vIH1cblxuICBmaW5kU2VydmljZShzZXJ2aWNlczogVXNlclNlcnZpY2VzLCBpZDogc3RyaW5nKTogU2VydmljZSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoc2VydmljZXMpLnJlZHVjZSgoY3VycmVudDogU2VydmljZSwgc2VydmljZTE6IFNlcnZpY2VbXSk6IFNlcnZpY2UgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY3VycmVudCB8fFxuICAgICAgICBzZXJ2aWNlMS5maW5kKChzZXJ2aWNlMjogU2VydmljZSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgIHJldHVybiBzZXJ2aWNlMi5pZCA9PT0gaWQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sIG51bGwgYXMgU2VydmljZSk7XG4gIH1cblxuICBhbGxUcnVlKFxuICAgIHN1cHBJbmZvOiBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2VbXSxcbiAgICBmaWx0ZXI6IChzdXBwSW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlKSA9PiBib29sZWFuXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBwSW5mby5maWx0ZXIoZmlsdGVyKS5sZW5ndGggPT09IHN1cHBJbmZvLmxlbmd0aDtcbiAgfVxuXG4gIGpvaW5Gcm9tQXR0cmlidXRlPFQ+KGpvaW5DaGFyYWN0ZXI6IHN0cmluZywgYXR0cmlidXRlOiBrZXlvZiBULCBhcnJheTogVFtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYXJyYXkubWFwKChpdGVtOiBUKSA9PiBpdGVtW2F0dHJpYnV0ZV0pLmpvaW4oam9pbkNoYXJhY3Rlcik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gc3BsaXQgdXAgYW4gYXJyYXkgaW50byBlcXVhbCBwYXJ0c1xuICAgKiBAcGFyYW0gYXJyYXkgLSB0aGUgYXJyYXkgdG8gc3BsaXQgdXBcbiAgICogQHBhcmFtIHNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgY29uc3RpdHVhbnQgcGFydHNcbiAgICogQHBhcmFtIGluY2x1ZGVSZW1haW5kZXIgLSB3ZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgYW55IHJlbWFpbmcgcmVzdWx0cyAtIGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgc3BsaXRVcEFycmF5KGFycmF5OiBhbnlbXSwgc2l6ZTogbnVtYmVyLCBpbmNsdWRlUmVtYWluZGVyOiBib29sZWFuID0gdHJ1ZSk6IGFueVtdIHtcbiAgICBjb25zdCBhcnJheUNvcHkgPSBfLmNsb25lRGVlcChhcnJheSk7IC8vIGxvZGFzaCBjbG9uZSBkZWVwXG4gICAgbGV0IG5ld0FycmF5ID0gW107XG5cbiAgICBpZiAoYXJyYXlDb3B5Lmxlbmd0aCA+IHNpemUpIHtcbiAgICAgIHdoaWxlIChhcnJheUNvcHkubGVuZ3RoID49IHNpemUpIHtcbiAgICAgICAgbmV3QXJyYXkucHVzaChhcnJheUNvcHkuc3BsaWNlKDAsIHNpemUpKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIGFueSByZW1haW5pbmdcbiAgICAgIGlmIChhcnJheUNvcHkubGVuZ3RoICYmIGluY2x1ZGVSZW1haW5kZXIpIHtcbiAgICAgICAgbmV3QXJyYXkucHVzaChhcnJheUNvcHkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdBcnJheSA9IGFycmF5Q29weTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3QXJyYXk7XG4gIH1cblxuICBATWVtb3Jpc2UoKVxuICBnZXRUaW1lRGlmZmVyZW5jZShkZXBEYXRlVGltZTogc3RyaW5nLCBhcnJEYXRlVGltZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbW9tZW50KGRlcERhdGVUaW1lKS5kaWZmKG1vbWVudChhcnJEYXRlVGltZSksICdtaW51dGVzJyk7XG4gIH1cblxuICBATWVtb3Jpc2UoKVxuICBkYXlEaWZmZXJlbmNlKGRlcHQ6IHN0cmluZywgYXJyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRpZmYgPSBtb21lbnQoYXJyKS5zdGFydE9mKCdkYXknKS5kaWZmKG1vbWVudChkZXB0KS5zdGFydE9mKCdkYXknKSwgJ2RheScpO1xuICAgIHJldHVybiBkaWZmID4gMCA/IGRpZmYudG9TdHJpbmcoKSA6ICcnO1xuICB9XG5cbiAgQE1lbW9yaXNlKClcbiAgbWFrZUZhcmVSdWxlcyhmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtLCBpc011bHRpQ2l0eSA9IGZhbHNlKSB7XG4gICAgY29uc3QgZmxpZ2h0cyA9XG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQgPyBmbGlnaHQub3V0Ym91bmRGbGlnaHRzIDogZmxpZ2h0LmluYm91bmRGbGlnaHRzO1xuICAgIGNvbnN0IHJ1bGVzID0gaXNNdWx0aUNpdHlcbiAgICAgID8gZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5mYXJlQ29uZGl0aW9uc1xuICAgICAgOiBmbGlnaHRzLnJlZHVjZShcbiAgICAgICAgICAoY3VycmVudDogRmFyZUNvbmRpdGlvbnMsIG5leHQ6IEZsaWdodEpvdXJuZXkpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQuY2FuY2VsbGF0aW9uID0gY3VycmVudC5jYW5jZWxsYXRpb24uY29uY2F0KFxuICAgICAgICAgICAgICBuZXh0LmZhcmVDb25kaXRpb25zPy5jYW5jZWxsYXRpb24gfHwgW11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjdXJyZW50LmNoYW5nZSA9IGN1cnJlbnQuY2hhbmdlLmNvbmNhdChuZXh0LmZhcmVDb25kaXRpb25zPy5jaGFuZ2UgfHwgW10pO1xuICAgICAgICAgICAgY3VycmVudC5ub1Nob3cgPSBjdXJyZW50Lm5vU2hvdy5jb25jYXQobmV4dC5mYXJlQ29uZGl0aW9ucz8ubm9TaG93IHx8IFtdKTtcbiAgICAgICAgICAgIGN1cnJlbnQudXBncmFkZSA9IGN1cnJlbnQudXBncmFkZS5jb25jYXQobmV4dC5mYXJlQ29uZGl0aW9ucz8udXBncmFkZSB8fCBbXSk7XG4gICAgICAgICAgICBjdXJyZW50Lm90aGVyID0gY3VycmVudC5vdGhlci5jb25jYXQobmV4dC5mYXJlQ29uZGl0aW9ucz8ub3RoZXIgfHwgW10pO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWxsYXRpb246IFtdLFxuICAgICAgICAgICAgY2hhbmdlOiBbXSxcbiAgICAgICAgICAgIG5vU2hvdzogW10sXG4gICAgICAgICAgICB1cGdyYWRlOiBbXSxcbiAgICAgICAgICAgIG90aGVyOiBbXVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICByZXR1cm4geyBydWxlcywgZmxpZ2h0cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjIC0gZ2VuZXJhdGVzIGljcyBmaWxlIGNvbnRlbnRcbiAgICovXG4gIGdlbmVyYXRlSWNzRmlsZUNvbnRlbnRzKGJhc2tldEl0ZW1zOiBCYXNrZXRJdGVtW10sIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljc0JvZHlDb250ZW50ID0gdGhpcy5nZW5lcmF0ZUljc0ZpbGVCb2R5Q29udGVudChiYXNrZXRJdGVtcywgaW5kZXgpO1xuICAgIHJldHVybiBbXG4gICAgICAnQkVHSU46VkNBTEVOREFSXFxyXFxuJyxcbiAgICAgICdQUk9ESUQ6LS8vTWljcm9zIFRyYXZlbC8vU0FCUyBDb3Jwb3JhdGUgLSBNTVhJSUkvL0VOXFxyXFxuJyxcbiAgICAgICdWRVJTSU9OOjIuMFxcclxcbicsXG4gICAgICAnTUVUSE9EOlJFUVVFU1RcXHJcXG4nLFxuICAgICAgaWNzQm9keUNvbnRlbnQsXG4gICAgICAnRU5EOlZDQUxFTkRBUlxcclxcbidcbiAgICBdLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjIC0gZ2VuZXJhdGVzIGljcyBmaWxlIGJvZHkgY29udGVudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYmFza2V0SXRlbXMgcGFyYW1cbiAgICovXG4gIGdlbmVyYXRlSWNzRmlsZUJvZHlDb250ZW50KGJhc2tldEl0ZW1zOiBCYXNrZXRJdGVtW10sIGJhc2tldEl0ZW1JbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBib2R5Q29udGVudDogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIGdlbmVyYXRlIGNhbGVuZGFyIGRhdGEgZm9yIGVhY2ggYmFza2V0IGl0ZW1cbiAgICBiYXNrZXRJdGVtcy5tYXAoKGJhc2tldEl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBkU3RhcnQ6ICcnLFxuICAgICAgICBkRW5kOiAnJyxcbiAgICAgICAgbG9jYXRpb25Gcm9tOiAnJyxcbiAgICAgICAgbG9jYXRpb25UbzogJycsXG4gICAgICAgIGJhc2tldElkOiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICBzZXJ2aWNlVHlwZTogJycsXG4gICAgICAgIHN1bW1hcnk6ICcnXG4gICAgICB9O1xuICAgICAgY29uc3QgcmV0dXJuRGF0YSA9IHtcbiAgICAgICAgZFN0YXJ0OiAnJyxcbiAgICAgICAgZEVuZDogJycsXG4gICAgICAgIGxvY2F0aW9uRnJvbTogJycsXG4gICAgICAgIGxvY2F0aW9uVG86ICcnLFxuICAgICAgICBiYXNrZXRJZDogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgc2VydmljZVR5cGU6ICcnLFxuICAgICAgICBzdW1tYXJ5OiAnJ1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSAnREQgTU1NTSBZWVlZIEhIOm1tJztcbiAgICAgIGNvbnN0IHsgdHlwZSB9ID0gYmFza2V0SXRlbS5zZXJ2aWNlO1xuICAgICAgY29uc3QgeyBhZHVsdHMsIGNoaWxkcmVuLCBib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZSwgZGV0YWlsLCBzZXJ2aWNlLCBwbnJMb2NhdG9yIH0gPVxuICAgICAgICBiYXNrZXRJdGVtO1xuICAgICAgLy8gcG9wdWxhdGUgZGF0YSBvYmplY3QgZGVwZW5kaW5nIG9uIHRoZSBzZXJ2aWNlIHR5cGUgaW4gdGhlIGJhc2tldFxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuTG91bmdlOlxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5hcnJpdmFsRGF0ZXRpbWU7XG4gICAgICAgICAgZGF0YS5kRW5kID0gJyc7XG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEFpcnBvcnQgTG91bmdlIC0gJHtkZXRhaWwubmFtZX1gO1xuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xuICAgICAgICAgICAgYExvdW5nZTogJHtkZXRhaWwubmFtZX1cXFxcbmAsXG4gICAgICAgICAgICBgU3RhcnRzOiAke21vbWVudChkZXRhaWwuYXJyaXZhbERhdGV0aW1lKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxcXG5gLFxuICAgICAgICAgICAgYEFkdWx0czogJHthZHVsdHN9XFxcXG5gLFxuICAgICAgICAgICAgYENoaWxkcmVuOiAke2NoaWxkcmVufVxcXFxuYCxcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXG4gICAgICAgICAgXS5qb2luKCcnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XG4gICAgICAgICAgY29uc3Qgb3V0QWRkcmVzcyA9IGAke2RldGFpbC5mcm9tTG9jYXRpb24uYnVpbGRpbmdOYW1lfSwgJHtkZXRhaWwuZnJvbUxvY2F0aW9uLnBvc3Rjb2RlfWA7XG4gICAgICAgICAgY29uc3QgdG9BZGRyZXNzID0gYCR7ZGV0YWlsLnRvTG9jYXRpb24uYnVpbGRpbmdOYW1lfSwgJHtkZXRhaWwudG9Mb2NhdGlvbi5wb3N0Y29kZX1gO1xuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gbW9tZW50KGRldGFpbD8uZGVwYXJ0cykudXRjKCkuZm9ybWF0KCdZWVlZLU1NLURELEhIOm1tOnNzJyk7XG4gICAgICAgICAgZGF0YS5kRW5kID0gbW9tZW50KGRldGFpbD8uZGVwYXJ0cykudXRjKCkuYWRkKCcxJywgJ2hvdXInKS5mb3JtYXQoJ1lZWVktTU0tREQsSEg6bW06c3MnKTtcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgVGF4aSBib29raW5nIC0gZnJvbSAke291dEFkZHJlc3N9IHRvICR7dG9BZGRyZXNzfWA7XG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcbiAgICAgICAgICAgIGBQaWNrdXAgUG9pbnQ6ICR7b3V0QWRkcmVzc31cXFxcbmAsXG4gICAgICAgICAgICBgVGltZTogJHttb21lbnQoZGV0YWlsLmRlcGFydHMpLnV0YygpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxuICAgICAgICAgIF0uam9pbignJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FyOlxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ucGlja1VwRGF0ZXRpbWU7XG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5kcm9wT2ZmRGF0ZXRpbWU7XG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYENhciBib29raW5nIC0gZnJvbSAke2RldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzfSB0byAke2RldGFpbC5kcm9wT2ZmTG9jYXRpb24uYWRkcmVzc31gO1xuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXG4gICAgICAgICAgICBgUGlja3VwIFBvaW50OiAke2RldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzfVxcXFxuYCxcbiAgICAgICAgICAgIGBUaW1lOiAke21vbWVudChkZXRhaWwucGlja1VwRGF0ZXRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgQXJyaXZhbCBQb2ludDogJHtkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLmFkZHJlc3N9XFxcXG5gLFxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcbiAgICAgICAgICBdLmpvaW4oJycpO1xuICAgICAgICAgIChkYXRhLmxvY2F0aW9uRnJvbSA9IGRldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzKSxcbiAgICAgICAgICAgIChkYXRhLmxvY2F0aW9uVG8gPSBkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLmFkZHJlc3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuRmFzdFRyYWNrOlxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkV1cm9zdGFyOlxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IG1vbWVudChkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgZGF0YS5kRW5kID0gbW9tZW50KFxuICAgICAgICAgICAgZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1tkZXRhaWwub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdLmRhdGVUaW1lQXJyaXZpbmdcbiAgICAgICAgICApLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgRmxpZ2h0IEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0fSB0byAke1xuICAgICAgICAgICAgZGV0YWlsPy5vdXRib3VuZEZsaWdodHNbZGV0YWlsLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnRcbiAgICAgICAgICB9YDtcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xuICAgICAgICAgICAgYEZyb206ICR7ZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0fVxcXFxuYCxcbiAgICAgICAgICAgIGBEZXBhcnQ6ICR7bW9tZW50KGRldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgVG86ICR7XG4gICAgICAgICAgICAgIGRldGFpbC5vdXRib3VuZEZsaWdodHNbZGV0YWlsLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnRcbiAgICAgICAgICAgIH1cXFxcbmAsXG4gICAgICAgICAgICBgQXJyaXZlOiAke21vbWVudChcbiAgICAgICAgICAgICAgZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1tkZXRhaWwub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdLmRhdGVUaW1lQXJyaXZpbmdcbiAgICAgICAgICAgICkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcXFxuYCxcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXG4gICAgICAgICAgXS5qb2luKCcnKTtcblxuICAgICAgICAgIGlmIChkZXRhaWw/LmluYm91bmRGbGlnaHRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuRGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XG4gICAgICAgICAgICByZXR1cm5EYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICByZXR1cm5EYXRhLmRTdGFydCA9IG1vbWVudChkZXRhaWwuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLmZvcm1hdChcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybkRhdGEuZEVuZCA9IG1vbWVudChcbiAgICAgICAgICAgICAgZGV0YWlsLmluYm91bmRGbGlnaHRzW2RldGFpbC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kYXRlVGltZUFycml2aW5nXG4gICAgICAgICAgICApLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybkRhdGEuc3VtbWFyeSA9IGBGbGlnaHQgQm9va2luZyAtIEZyb20gJHtcbiAgICAgICAgICAgICAgZGV0YWlsLmluYm91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnRcbiAgICAgICAgICAgIH0gdG8gJHtkZXRhaWw/LmluYm91bmRGbGlnaHRzW2RldGFpbC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnR9YDtcbiAgICAgICAgICAgIHJldHVybkRhdGEuZGVzY3JpcHRpb24gPSBbXG4gICAgICAgICAgICAgIGBGcm9tOiAke2RldGFpbC5pbmJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0fVxcXFxuYCxcbiAgICAgICAgICAgICAgYERlcGFydDogJHttb21lbnQoZGV0YWlsLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxcXG5gLFxuICAgICAgICAgICAgICBgVG86ICR7XG4gICAgICAgICAgICAgICAgZGV0YWlsLmluYm91bmRGbGlnaHRzW2RldGFpbC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnRcbiAgICAgICAgICAgICAgfVxcXFxuYCxcbiAgICAgICAgICAgICAgYEFycml2ZTogJHttb21lbnQoXG4gICAgICAgICAgICAgICAgZGV0YWlsLmluYm91bmRGbGlnaHRzW2RldGFpbC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kYXRlVGltZUFycml2aW5nXG4gICAgICAgICAgICAgICkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcXFxuYCxcbiAgICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcbiAgICAgICAgICAgIF0uam9pbignJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxuICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGJhc2tldEl0ZW0uZGV0YWlsLnJvb21zWzBdLmNoZWNrSW4uc3BsaXQoJ1QnKTtcbiAgICAgICAgICBzdGFydERhdGVbMV0gPSAnMTU6MDA6MDAuMDAwWic7XG4gICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IGJhc2tldEl0ZW0uZGV0YWlsLnJvb21zWzBdLmNoZWNrT3V0LnNwbGl0KCdUJyk7XG4gICAgICAgICAgZW5kRGF0ZVsxXSA9ICcxMTowMDowMC4wMDBaJztcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBzdGFydERhdGUuam9pbignVCcpOyAvLyB3ZSBoYXZlIHRoZXNlIGFzIG1pZG5pZ2h0IGhhcmRjb2RlZFxuICAgICAgICAgIGRhdGEuZEVuZCA9IGVuZERhdGUuam9pbignVCcpO1xuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBIb3RlbCBib29raW5nIC0gICR7ZGV0YWlsLmhvdGVsTmFtZX1gO1xuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXG4gICAgICAgICAgICBgSG90ZWw6ICR7ZGV0YWlsLmhvdGVsTmFtZX1cXFxcbmAsXG4gICAgICAgICAgICBgQXJyaXZhbDogJHttb21lbnQoc3RhcnREYXRlLmpvaW4oJ1QnKSkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcXFxuYCxcbiAgICAgICAgICAgIGBEZXBhcnR1cmU6ICR7bW9tZW50KGVuZERhdGUuam9pbignVCcpKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxcXG5gLFxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke3BuckxvY2F0b3J9YFxuICAgICAgICAgIF0uam9pbignJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWw6XG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZURhdGVUaW1lO1xuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XG4gICAgICAgICAgZGF0YS5sb2NhdGlvbkZyb20gPSBkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZTtcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uVG8gPSBkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYFRyYWluIEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9IHRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfWA7XG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcbiAgICAgICAgICAgIGBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9XFxcXG5gLFxuICAgICAgICAgICAgYFRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfVxcXFxuYCxcbiAgICAgICAgICAgIGBEZXBhcnR1cmUgJHttb21lbnQoZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgQXJyaXZhbCAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxuICAgICAgICAgIF0uam9pbignJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuUGFya2luZzpcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LmFycml2YWxEYXRldGltZTtcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/LmRlcGFydERhdGV0aW1lO1xuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBBaXJwb3J0IHBhcmtpbmcgLSAke2RldGFpbC5uYW1lfWA7XG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcbiAgICAgICAgICAgIGBBaXJwb3J0IFBhcmtpbmc6ICR7ZGV0YWlsLm5hbWV9XFxcXG5gLFxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcbiAgICAgICAgICBdLmpvaW4oJycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLlJhaWw6XG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZURhdGVUaW1lO1xuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XG4gICAgICAgICAgZGF0YS5sb2NhdGlvbkZyb20gPSBkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZTtcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uVG8gPSBkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYFRyYWluIEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9IHRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfWA7XG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcbiAgICAgICAgICAgIGBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9XFxcXG5gLFxuICAgICAgICAgICAgYFRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfVxcXFxuYCxcbiAgICAgICAgICAgIGBEZXBhcnR1cmUgJHttb21lbnQoZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgQXJyaXZhbCAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxuICAgICAgICAgIF0uam9pbignJyk7XG5cbiAgICAgICAgICBpZiAoZGV0YWlsPy5pbndhcmREZXRhaWwpIHtcbiAgICAgICAgICAgIHJldHVybkRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xuICAgICAgICAgICAgcmV0dXJuRGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuRGF0YS5kU3RhcnQgPSBkZXRhaWw/Lmlud2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZTtcbiAgICAgICAgICAgIHJldHVybkRhdGEuZEVuZCA9IGRldGFpbD8uaW53YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZTtcbiAgICAgICAgICAgIHJldHVybkRhdGEubG9jYXRpb25Gcm9tID0gZGV0YWlsLmlud2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZTtcbiAgICAgICAgICAgIHJldHVybkRhdGEubG9jYXRpb25UbyA9IGRldGFpbC5pbndhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xuICAgICAgICAgICAgcmV0dXJuRGF0YS5zdW1tYXJ5ID0gYFRyYWluIEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLmlud2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZX0gdG8gJHtkZXRhaWwuaW53YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1gO1xuICAgICAgICAgICAgcmV0dXJuRGF0YS5kZXNjcmlwdGlvbiA9IFtcbiAgICAgICAgICAgICAgYEZyb20gJHtkZXRhaWwuaW53YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfVxcXFxuYCxcbiAgICAgICAgICAgICAgYFRvICR7ZGV0YWlsLmlud2FyZERldGFpbC5hcnJpdmFsU3RhdGlvbk5hbWV9XFxcXG5gLFxuICAgICAgICAgICAgICBgRGVwYXJ0dXJlICR7bW9tZW50KGRldGFpbC5pbndhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICAgIGBBcnJpdmFsICR7bW9tZW50KGRldGFpbC5pbndhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxcXG5gLFxuICAgICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7cG5yTG9jYXRvcn1gXG4gICAgICAgICAgICBdLmpvaW4oJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGxldCBhZGRpdGlvbmFsSW5kZXggPSAnJztcbiAgICAgIGlmIChiYXNrZXRJdGVtSW5kZXggPiAtMSkge1xuICAgICAgICBhZGRpdGlvbmFsSW5kZXggPSBgLiR7YmFza2V0SXRlbUluZGV4fWA7XG4gICAgICB9XG4gICAgICBib2R5Q29udGVudC5wdXNoKFxuICAgICAgICBbXG4gICAgICAgICAgJ0JFR0lOOlZFVkVOVFxcclxcbicsXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPyBgRFRTVEFSVDoke21vbWVudChkYXRhLmRTdGFydCkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKX1cXHJcXG5gIDogJycsXG4gICAgICAgICAgZGF0YS5kRW5kID8gYERURU5EOiR7bW9tZW50KGRhdGEuZEVuZCkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKX1cXHJcXG5gIDogJycsXG4gICAgICAgICAgJ09SR0FOSVpFUjtDTj1cIkRvIG5vdCByZXBseSB0byB0aGlzIGVtYWlsXCI6bWFpbHRvOmRvX25vdF9yZXBseUBzYWJzY29ycC5jb21cXHJcXG4nLFxuICAgICAgICAgIGRhdGEubG9jYXRpb25UbyAmJiBkYXRhLmxvY2F0aW9uRnJvbVxuICAgICAgICAgICAgPyBgTE9DQVRJT046ICR7ZGF0YS5sb2NhdGlvblRvfSB0byAke2RhdGEubG9jYXRpb25Gcm9tfSBcXHJcXG5gXG4gICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICdUUkFOU1A6T1BBUVVFXFxyXFxuJyxcbiAgICAgICAgICAnU0VRVUVOQ0U6MFxcclxcbicsXG4gICAgICAgICAgYFVJRDoke2RhdGEuc2VydmljZVR5cGV9XyR7aW5kZXh9JHthZGRpdGlvbmFsSW5kZXh9XyR7ZGF0YS5iYXNrZXRJZH1Ac2Fic2NvcnAuY29tXFxyXFxuYCxcbiAgICAgICAgICBgRFRTVEFNUDoke21vbWVudCgpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJyl9XFxyXFxuYCxcbiAgICAgICAgICBgREVTQ1JJUFRJT046JHtkYXRhLmRlc2NyaXB0aW9ufVxcclxcbmAsXG4gICAgICAgICAgYFNVTU1BUlk6JHtkYXRhLnN1bW1hcnl9XFxyXFxuYCxcbiAgICAgICAgICAnRU5EOlZFVkVOVFxcclxcbidcbiAgICAgICAgXS5qb2luKCcnKVxuICAgICAgKTtcblxuICAgICAgaWYgKHJldHVybkRhdGEuZFN0YXJ0KSB7XG4gICAgICAgIGJvZHlDb250ZW50LnB1c2goXG4gICAgICAgICAgW1xuICAgICAgICAgICAgJ0JFR0lOOlZFVkVOVFxcclxcbicsXG4gICAgICAgICAgICByZXR1cm5EYXRhLmRTdGFydFxuICAgICAgICAgICAgICA/IGBEVFNUQVJUOiR7bW9tZW50KHJldHVybkRhdGEuZFN0YXJ0KS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpfVxcclxcbmBcbiAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgIHJldHVybkRhdGEuZEVuZCA/IGBEVEVORDoke21vbWVudChyZXR1cm5EYXRhLmRFbmQpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJyl9XFxyXFxuYCA6ICcnLFxuICAgICAgICAgICAgJ09SR0FOSVpFUjtDTj1cIkRvIG5vdCByZXBseSB0byB0aGlzIGVtYWlsXCI6bWFpbHRvOmRvX25vdF9yZXBseUBzYWJzY29ycC5jb21cXHJcXG4nLFxuICAgICAgICAgICAgcmV0dXJuRGF0YS5sb2NhdGlvblRvICYmIHJldHVybkRhdGEubG9jYXRpb25Gcm9tXG4gICAgICAgICAgICAgID8gYExPQ0FUSU9OOiAke3JldHVybkRhdGEubG9jYXRpb25Ub30gdG8gJHtyZXR1cm5EYXRhLmxvY2F0aW9uRnJvbX0gXFxyXFxuYFxuICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgJ1RSQU5TUDpPUEFRVUVcXHJcXG4nLFxuICAgICAgICAgICAgJ1NFUVVFTkNFOjBcXHJcXG4nLFxuICAgICAgICAgICAgYFVJRDoke3JldHVybkRhdGEuc2VydmljZVR5cGV9XyR7aW5kZXh9LjVfJHtyZXR1cm5EYXRhLmJhc2tldElkfUBzYWJzY29ycC5jb21cXHJcXG5gLFxuICAgICAgICAgICAgYERUU1RBTVA6JHttb21lbnQoKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpfVxcclxcbmAsXG4gICAgICAgICAgICBgREVTQ1JJUFRJT046JHtyZXR1cm5EYXRhLmRlc2NyaXB0aW9ufVxcclxcbmAsXG4gICAgICAgICAgICBgU1VNTUFSWToke3JldHVybkRhdGEuc3VtbWFyeX1cXHJcXG5gLFxuICAgICAgICAgICAgJ0VORDpWRVZFTlRcXHJcXG4nXG4gICAgICAgICAgXS5qb2luKCcnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJvZHlDb250ZW50LmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjIC0gY3JlYXRlcyBhbiBlbGVtZW50IGluIG1lbW9yeSBhbmQgdHJpZ2dlcnMgY2xpY2sgZXZlbnQgdG8gZG93bmxvYWQgaWNzIGZpbGVcbiAgICovXG4gIGRvd25sb2FkSWNzKGZpbGVuYW1lOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsJyArIGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KSk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBzcGxpdCBhIHN0cmluZyBvbiBjYXBpdGFsc1xuICAgKiBAcGFyYW0gcmF3U3RyaW5nIC0gdGhlIHN0cmluZyB3ZSB3YW50IHRvIHNwbGl0XG4gICAqIEBwYXJhbSBqb2luIC0gd2hldGhlciBvciBub3QgdG8gam9pbmcgdGhlIHNwbGl0IGludG8gb25lIHN0cmluZywgc2VwZXJhdGVkIGJ5IGEgc3BhY2VcbiAgICogQHJldHVybnMgc3RyaW5nL3N0cmluZ1tdXG4gICAqL1xuICBzcGxpdFN0cmluZ09uQ2FwaXRhbHMocmF3U3RyaW5nOiBzdHJpbmcsIGpvaW46IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzcGxpdFN0cmluZyA9IHJhd1N0cmluZy5zcGxpdCgvKD89W0EtWl0pLyk7XG5cbiAgICBpZiAoam9pbikge1xuICAgICAgcmV0dXJuIHNwbGl0U3RyaW5nLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3BsaXRTdHJpbmc7XG4gIH1cblxuICBjcmVhdGVGbGlnaHRGaWx0ZXJzKFxuICAgIGpvdXJuZXlzOiBGbGlnaHRJdGluZXJhcnlbXSxcbiAgICBkZWZhdWx0RmlsdGVyczogRmxpZ2h0RmlsdGVycyxcbiAgICB2aWE/OiBhbnlcbiAgKTogRmxpZ2h0RmlsdGVycyB7XG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcbiAgICAgIChmaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzLCByZXN1bHQxOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyk6IEZsaWdodEZpbHRlcnMgPT4ge1xuICAgICAgICBjb25zdCBvdXRTdG9wcyA9IHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDE7XG4gICAgICAgIGZpbHRlcnMuc3RvcHNbb3V0U3RvcHNdID0gZmlsdGVycy5zdG9wc1tvdXRTdG9wc10gfHwge1xuICAgICAgICAgIGRpc3BsYXk6IG91dFN0b3BzID09PSAwID8gJ0RpcmVjdCcgOiBgJHtvdXRTdG9wc30gc3RvcGAgKyAob3V0U3RvcHMgIT09IDEgPyAncycgOiAnJyksXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiBvdXRTdG9wcyArIDFcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVxdWlyZXNSZWFzb24gPSByZXN1bHQxLnVuYXZhaWxhYmxlXG4gICAgICAgICAgPyBUcmF2ZWxQb2xpY2llcy5VTkFWQUlMQUJMRVxuICAgICAgICAgIDogcmVzdWx0MS5yZXF1aXJlc1JlYXNvbktleXNcbiAgICAgICAgICA/IFRyYXZlbFBvbGljaWVzLkFMTE9XX1dJVEhfUkVBU09OXG4gICAgICAgICAgOiBUcmF2ZWxQb2xpY2llcy5JTl9QT0xJQ1k7XG4gICAgICAgIGlmIChyZXF1aXJlc1JlYXNvbiAhPT0gJ1VuYXZhaWxhYmxlJykge1xuICAgICAgICAgIGZpbHRlcnMudHJhdmVsUG9saWN5W3JlcXVpcmVzUmVhc29uXSA9IGZpbHRlcnMudHJhdmVsUG9saWN5W3JlcXVpcmVzUmVhc29uXSB8fCB7XG4gICAgICAgICAgICBkaXNwbGF5OiByZXF1aXJlc1JlYXNvbixcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiByZXF1aXJlc1JlYXNvblxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5TdG9wcyA9IHJlc3VsdDEuaW5ib3VuZEZsaWdodHMgPyByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgICBjb25zdCB0b3RhbFN0b3BzID0gaW5TdG9wcyA+IG91dFN0b3BzID8gaW5TdG9wcyA6IG91dFN0b3BzO1xuICAgICAgICBmaWx0ZXJzLnRvdGFsU3RvcHNbdG90YWxTdG9wc10gPSBmaWx0ZXJzLnRvdGFsU3RvcHNbdG90YWxTdG9wc10gfHwge1xuICAgICAgICAgIGRpc3BsYXk6XG4gICAgICAgICAgICB0b3RhbFN0b3BzID09PSAwID8gJ0RpcmVjdCcgOiBgJHt0b3RhbFN0b3BzfSBzdG9wYCArICh0b3RhbFN0b3BzICE9PSAxID8gJ3MnIDogJycpLFxuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZTogdG90YWxTdG9wcyArIDFcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB1cGRhdGVGbGlnaHRJdGVtcyA9IChmbGlnaHQ6IEZsaWdodEpvdXJuZXkpOiB2b2lkID0+IHtcbiAgICAgICAgICBmaWx0ZXJzLmNsYXNzZXNbZmxpZ2h0LmNhYmluQ2xhc3NdID0gZmlsdGVycy5jbGFzc2VzW2ZsaWdodC5jYWJpbkNsYXNzXSB8fCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGlnaHQuY2FiaW5DbGFzcyxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiBmbGlnaHQuY2FiaW5DbGFzc1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gZmlsdGVycy5haXJsaW5lc1tmbGlnaHQubWFya2V0aW5nQ2Fycmllcl0gPSBmaWx0ZXJzLmFpcmxpbmVzW2ZsaWdodC5tYXJrZXRpbmdDYXJyaWVyXSB8fCB7XG4gICAgICAgICAgLy8gICBkaXNwbGF5OiBmbGlnaHQubWFya2V0aW5nQ2Fycmllck5hbWUsXG4gICAgICAgICAgLy8gICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgLy8gICB2YWx1ZTogZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJcbiAgICAgICAgICAvLyB9O1xuICAgICAgICAgIGlmIChmbGlnaHQuZmFyZUluZm8udHlwZSA9PT0gJ1ByaXZhdGUnKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLnByaXZhdGVGYXJlc1tmbGlnaHQuZmFyZUluZm8udGl0bGVdID0gZmlsdGVycy5wcml2YXRlRmFyZXNbXG4gICAgICAgICAgICAgIGZsaWdodC5mYXJlSW5mby50aXRsZVxuICAgICAgICAgICAgXSB8fCB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsaWdodC5mYXJlSW5mby50aXRsZSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB2YWx1ZTogZmxpZ2h0LmZhcmVJbmZvLnRpdGxlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBnZXRBaXJsaW5lID0gKGZsaWdodDogRmxpZ2h0Sm91cm5leSk6IHZvaWQgPT4ge1xuICAgICAgICAgIGZpbHRlcnMuYWlybGluZXNbZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJdID0gZmlsdGVycy5haXJsaW5lc1tmbGlnaHQubWFya2V0aW5nQ2Fycmllcl0gfHwge1xuICAgICAgICAgICAgZGlzcGxheTogZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJOYW1lLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyXG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICYmIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgY29tbW9uTWFya2V0aW5nQ2FycmllcnM6IEZsaWdodEpvdXJuZXlbXSA9IHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmZpbHRlcihcbiAgICAgICAgICAgIG91dGJvdW5kRmxpZ2h0ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMuc29tZShpbmJvdW5kRmxpZ2h0ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5ib3VuZEZsaWdodC5tYXJrZXRpbmdDYXJyaWVyID09PSBvdXRib3VuZEZsaWdodC5tYXJrZXRpbmdDYXJyaWVyO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbW1vbk1hcmtldGluZ0NhcnJpZXJzLmZvckVhY2goZ2V0QWlybGluZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMuZm9yRWFjaChnZXRBaXJsaW5lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmZvckVhY2godXBkYXRlRmxpZ2h0SXRlbXMpO1xuICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gcmVzdWx0MS5iYWdnYWdlQWxsb3dhbmNlXG4gICAgICAgICAgPy5maWx0ZXIoYSA9PiBhPy50eXBlID09PSAnQ2hlY2tJbicpXG4gICAgICAgICAgLm1hcChhID0+IGE/LnF0eSkgYXMgbnVtYmVyW107XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGggPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpIDogMDtcbiAgICAgICAgZmlsdGVycy5iYWdnYWdlW2JhZ2dhZ2VdID0gZmlsdGVycy5iYWdnYWdlW2JhZ2dhZ2VdIHx8IHtcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgZGlzcGxheTogYCR7YmFnZ2FnZX0gYmFnJHtiYWdnYWdlID4gMSA/ICdzJyA6ICcnfWAsXG4gICAgICAgICAgdmFsdWU6IGJhZ2dhZ2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaW5kZXhlZEZsaWdodCA9IChcbiAgICAgICAgICBmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10sXG4gICAgICAgICAgZmlsdGVyQXR0cmlidXRlOiBGbGlnaHRGaWx0ZXJzUmVjb3JkS2V5cyxcbiAgICAgICAgICBmbGlnaHRBdHRyaWJ1dGU6IGtleW9mIEZsaWdodEpvdXJuZXksXG4gICAgICAgICAgZmxpZ2h0QXR0cmlidXRlTmFtZToga2V5b2YgRmxpZ2h0Sm91cm5leSxcbiAgICAgICAgICBpbmRleDogbnVtYmVyXG4gICAgICAgICk6IHZvaWQgPT4ge1xuICAgICAgICAgIGNvbnN0IHRlbXA6IHN0cmluZyA9XG4gICAgICAgICAgICBmbGlnaHRzICYmIGZsaWdodHNbaW5kZXhdID8gZmxpZ2h0c1tpbmRleF1bZmxpZ2h0QXR0cmlidXRlXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAodGVtcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmaWx0ZXJzW2ZpbHRlckF0dHJpYnV0ZV1bdGVtcF0gPSBmaWx0ZXJzW2ZpbHRlckF0dHJpYnV0ZV1bdGVtcF0gfHwge1xuICAgICAgICAgICAgICB2YWx1ZTogZmxpZ2h0c1tpbmRleF1bZmxpZ2h0QXR0cmlidXRlXSxcbiAgICAgICAgICAgICAgZGlzcGxheTogZmxpZ2h0c1tpbmRleF1bZmxpZ2h0QXR0cmlidXRlTmFtZV0sXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGluZGV4ZWRGbGlnaHQoXG4gICAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgICd2aWFzJyxcbiAgICAgICAgICAgICdvcmlnaW5BaXJwb3J0JyxcbiAgICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXG4gICAgICAgICAgICBpbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMTsgaW5kZXgrKykge1xuICAgICAgICAgIGluZGV4ZWRGbGlnaHQoXG4gICAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgICd2aWFzJyxcbiAgICAgICAgICAgICdkZXN0aW5hdGlvbkFpcnBvcnQnLFxuICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydE5hbWUnLFxuICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXhlZEZsaWdodChcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAnZGVwYXR1cmVBaXJwb3J0JyxcbiAgICAgICAgICAnb3JpZ2luQWlycG9ydCcsXG4gICAgICAgICAgJ29yaWdpbkFpcnBvcnROYW1lJyxcbiAgICAgICAgICAwXG4gICAgICAgICk7XG4gICAgICAgIGluZGV4ZWRGbGlnaHQoXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMsXG4gICAgICAgICAgJ2Fycml2YWxBaXJwb3J0JyxcbiAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0JyxcbiAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0TmFtZScsXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxuICAgICAgICApO1xuXG4gICAgICAgIGZpbHRlcnMucHJpY2UubWluID1cbiAgICAgICAgICBmaWx0ZXJzLnByaWNlLm1pbiA8IHJlc3VsdDEudG90YWwucHJpY2UgPyBmaWx0ZXJzLnByaWNlLm1pbiA6IHJlc3VsdDEudG90YWwucHJpY2U7XG5cbiAgICAgICAgZmlsdGVycy5wcmljZS5tYXggPVxuICAgICAgICAgIGZpbHRlcnMucHJpY2UubWF4ID4gcmVzdWx0MS50b3RhbC5wcmljZSA/IGZpbHRlcnMucHJpY2UubWF4IDogcmVzdWx0MS50b3RhbC5wcmljZTtcblxuICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1pbiA9XG4gICAgICAgICAgZmlsdGVycy5kdXJhdGlvbi5taW4gPCByZXN1bHQxLm91dGJvdW5kVG90YWxEdXJhdGlvblxuICAgICAgICAgICAgPyBmaWx0ZXJzLmR1cmF0aW9uLm1pblxuICAgICAgICAgICAgOiByZXN1bHQxLm91dGJvdW5kVG90YWxEdXJhdGlvbjtcblxuICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1heCA9XG4gICAgICAgICAgZmlsdGVycy5kdXJhdGlvbi5tYXggPiByZXN1bHQxLm91dGJvdW5kVG90YWxEdXJhdGlvblxuICAgICAgICAgICAgPyBmaWx0ZXJzLmR1cmF0aW9uLm1heFxuICAgICAgICAgICAgOiByZXN1bHQxLm91dGJvdW5kVG90YWxEdXJhdGlvbjtcblxuICAgICAgICBjb25zdCBkZXBhcnRUaW1lID0gcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoXG4gICAgICAgICAgPyBtb21lbnQocmVzdWx0MS5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLmdldCgnaG91cicpXG4gICAgICAgICAgOiAwO1xuXG4gICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5taW4gPVxuICAgICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5taW4gPCBkZXBhcnRUaW1lID8gZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1pbiA6IGRlcGFydFRpbWU7XG4gICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5tYXggPVxuICAgICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5tYXggPiBkZXBhcnRUaW1lID8gZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1heCA6IGRlcGFydFRpbWU7XG5cbiAgICAgICAgY29uc3QgYXJyaXZhbFRpbWUgPSByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGhcbiAgICAgICAgICA/IG1vbWVudChcbiAgICAgICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHNbcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV0uZGF0ZVRpbWVBcnJpdmluZ1xuICAgICAgICAgICAgKS5nZXQoJ2hvdXInKVxuICAgICAgICAgIDogMDtcblxuICAgICAgICBmaWx0ZXJzLmFycml2YWxUaW1lLm1pbiA9XG4gICAgICAgICAgZmlsdGVycy5hcnJpdmFsVGltZS5taW4gPCBhcnJpdmFsVGltZSA/IGZpbHRlcnMuYXJyaXZhbFRpbWUubWluIDogYXJyaXZhbFRpbWU7XG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4ID1cbiAgICAgICAgICBmaWx0ZXJzLmFycml2YWxUaW1lLm1heCA+IGFycml2YWxUaW1lID8gZmlsdGVycy5hcnJpdmFsVGltZS5tYXggOiBhcnJpdmFsVGltZTtcblxuICAgICAgICBpZiAocmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1pbiA9XG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1pbiA8IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb25cbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1pblxuICAgICAgICAgICAgICA6IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb247XG5cbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1heCA9XG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1heCA+IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb25cbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1heFxuICAgICAgICAgICAgICA6IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb247XG5cbiAgICAgICAgICBjb25zdCBkZXBhcnRUaW1lUmV0dXJuID1cbiAgICAgICAgICAgIHJlc3VsdDEgJiYgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQxLmluYm91bmRGbGlnaHRzWzBdXG4gICAgICAgICAgICAgID8gbW9tZW50KHJlc3VsdDEuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLmdldCgnaG91cicpXG4gICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWluID1cbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5taW4gPCBkZXBhcnRUaW1lUmV0dXJuXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1pblxuICAgICAgICAgICAgICA6IGRlcGFydFRpbWVSZXR1cm47XG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1heCA9XG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWF4ID4gZGVwYXJ0VGltZVJldHVyblxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5tYXhcbiAgICAgICAgICAgICAgOiBkZXBhcnRUaW1lUmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgYXJyaXZhbFRpbWVSZXR1cm4gPSByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGhcbiAgICAgICAgICAgID8gbW9tZW50KFxuICAgICAgICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzW3Jlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdLmRhdGVUaW1lQXJyaXZpbmdcbiAgICAgICAgICAgICAgKS5nZXQoJ2hvdXInKVxuICAgICAgICAgICAgOiAwO1xuXG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5taW4gPVxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5taW4gPCBhcnJpdmFsVGltZVJldHVyblxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWluXG4gICAgICAgICAgICAgIDogYXJyaXZhbFRpbWVSZXR1cm47XG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXggPVxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXggPiBhcnJpdmFsVGltZVJldHVyblxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWF4XG4gICAgICAgICAgICAgIDogYXJyaXZhbFRpbWVSZXR1cm47XG5cbiAgICAgICAgICAocmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkuZm9yRWFjaCh1cGRhdGVGbGlnaHRJdGVtcyk7XG5cbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGluZGV4ZWRGbGlnaHQoXG4gICAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMsXG4gICAgICAgICAgICAgICd2aWFzJyxcbiAgICAgICAgICAgICAgJ29yaWdpbkFpcnBvcnQnLFxuICAgICAgICAgICAgICAnb3JpZ2luQWlycG9ydE5hbWUnLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBpbmRleGVkRmxpZ2h0KFxuICAgICAgICAgICAgICByZXN1bHQxLmluYm91bmRGbGlnaHRzLFxuICAgICAgICAgICAgICAndmlhcycsXG4gICAgICAgICAgICAgICdkZXN0aW5hdGlvbkFpcnBvcnQnLFxuICAgICAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0TmFtZScsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluZGV4ZWRGbGlnaHQoXG4gICAgICAgICAgICByZXN1bHQxLmluYm91bmRGbGlnaHRzLFxuICAgICAgICAgICAgJ2RlcGF0dXJlUmV0dXJuQWlycG9ydCcsXG4gICAgICAgICAgICAnb3JpZ2luQWlycG9ydCcsXG4gICAgICAgICAgICAnb3JpZ2luQWlycG9ydE5hbWUnLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICk7XG4gICAgICAgICAgaW5kZXhlZEZsaWdodChcbiAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMsXG4gICAgICAgICAgICAnYXJyaXZhbFJldHVybkFpcnBvcnQnLFxuICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydCcsXG4gICAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0TmFtZScsXG4gICAgICAgICAgICByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYSB2aWEgaXMgc2VsZWN0ZWQgaW4gdGhlIHNlYXJjaCBhbmQgdGhpcyBzdG9wIGV4aXN0cywgdGhlbiB3ZSBtYXJrIGl0IGFzIHNlbGVjdGVkIGFuZCBsZWF2ZSBvbmx5IGl0IGluIHRoZSBsaXN0LlxuICAgICAgICAvLyBpZiB0aGlzIHN0b3AgZG9lcyBub3QgYXBwZWFyIGFtb25nIGFsbCB0aGUgcmVzdWx0cywgdGhlbiB3ZSBzaG93IGFsbCB0aGUgc3RvcHMuXG4gICAgICAgIGlmICh2aWEpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWx0ZXJzLnZpYXMpIHtcbiAgICAgICAgICAgIGlmICh2aWEgPT09IGtleSkge1xuICAgICAgICAgICAgICBmaWx0ZXJzLnZpYXNba2V5XS5zZWxlY3RlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRWaWFzID0gT2JqZWN0LmtleXMoZmlsdGVycy52aWFzKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGtleTogc3RyaW5nKSA9PiB2aWEuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgICAgICAucmVkdWNlKChvYmo6IFJlY29yZDxzdHJpbmcsIFNlbGVjdEZpbHRlcj4sIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSBmaWx0ZXJzLnZpYXNba2V5XTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgICBmaWx0ZXJzLnZpYXMgPSBmaWx0ZXJlZFZpYXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgICB9LFxuICAgICAgdGhpcy5jbG9uZShkZWZhdWx0RmlsdGVycylcbiAgICApO1xuICB9XG5cbiAgbWFwT3Zlck9iamVjdDxWPihcbiAgICBpdGVtczogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj4sXG4gICAgY2FsbGJhY2s6ICh2YWx1ZTogViwga2V5Pzogc3RyaW5nIHwgbnVtYmVyKSA9PiBWXG4gICk6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaXRlbXMpLnJlZHVjZShcbiAgICAgIChhY2N1bTogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj4sIGVudHJpZXM6IFtzdHJpbmcgfCBudW1iZXIsIFZdKSA9PiB7XG4gICAgICAgIGFjY3VtW2VudHJpZXNbMF1dID0gY2FsbGJhY2soZW50cmllc1sxXSwgZW50cmllc1swXSk7XG4gICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPlxuICAgICk7XG4gIH1cblxuICBub3JtYWxpc2VNaW51dGVUb0Jhc2UxMChtaW46IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoKG1pbiAqIDEwMCkgLyA2MCk7XG4gIH1cblxuICBPQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzKHZhbHVlOiBPQlRGbGlnaHRDYWJpbkNsYXNzKTogTWFpbkZsaWdodENhYmluQ2xhc3Mge1xuICAgIGNvbnN0IE9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3M6IFJlY29yZDxPQlRGbGlnaHRDYWJpbkNsYXNzLCBNYWluRmxpZ2h0Q2FiaW5DbGFzcz4gPVxuICAgICAge1xuICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc106IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXG4gICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzQnJhbmRlZF06IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXG4gICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpLFxuICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGlCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGksXG4gICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3MsXG4gICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzLFxuICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZF06IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXG4gICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZF06IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXG4gICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCxcbiAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCxcbiAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215LFxuICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWRdOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XG4gICAgICB9O1xuICAgIHJldHVybiBPQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzW3ZhbHVlXTtcbiAgfVxuICBGbGlnaHRDYWJpbkNsYXNzVG9CcmFuZGVkT0JURmxpZ2h0Q2FiaW5DbGFzcyhcbiAgICB2YWx1ZTogRmxpZ2h0R3JvdXBzLFxuICAgIGlzQnJhbmRlZDogYm9vbGVhblxuICApOiBPQlRGbGlnaHRDYWJpbkNsYXNzIHtcbiAgICBjb25zdCB0eXBlczogUmVjb3JkPEZsaWdodEdyb3VwcywgT0JURmxpZ2h0Q2FiaW5DbGFzcz4gPSBpc0JyYW5kZWRcbiAgICAgID8ge1xuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWQsXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUJ1c2luZXNzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc0JyYW5kZWQsXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuTGl0ZUVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZCxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZEJyYW5kZWQsXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWQsXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZCxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aUJyYW5kZWQsXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc106IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc0JyYW5kZWQsXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzQnJhbmRlZCxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teSxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtQnVzaW5lc3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzLFxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkxpdGVFY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRmlyc3RdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0LFxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aSxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzLFxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RcbiAgICAgICAgfTtcbiAgICByZXR1cm4gdHlwZXNbdmFsdWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNvbnZlcnQgZnJvbSBtZXRyZXMgdG8gbWlsZXNcbiAgICogQHBhcmFtIG1ldHJlcyAtIHRoZSBhbW91bnQgb2YgbWV0cmVzIHRvIGNvbnZlcnRcbiAgICogQHBhcmFtIGRlY2ltYWxQbGFjZXMgLSB0aGUgYW1vdW50IG9mIGQucCB0byBjb252ZXJ0IHRvLCBpZiBuZWdhdGl2ZSAoZGVmYXVsdCkgZG9lcyBub3QgcmVzdHJpY3QgdGhlIGRlY2ltYWwgcGxhY2VzXG4gICAqL1xuICBjb252ZXJ0TWV0cmVzVG9NaWxlcyhtZXRyZXM6IG51bWJlciwgZGVjaW1hbFBsYWNlczogbnVtYmVyID0gLTEpOiBudW1iZXIge1xuICAgIGNvbnN0IG1pbGVzID0gbWV0cmVzIC8gTUVUUkVTX1RPX01JTEVTX0NPTlZFUlNJT047XG5cbiAgICBpZiAoZGVjaW1hbFBsYWNlcyA+PSAwKSB7XG4gICAgICByZXR1cm4gTnVtYmVyKG1pbGVzLnRvRml4ZWQoZGVjaW1hbFBsYWNlcykpO1xuICAgIH1cblxuICAgIHJldHVybiBtaWxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBjb252ZXJ0IHNlY29uZHMgdG8gaG91cnNcbiAgICogQHBhcmFtIHNlY29uZHMgLSB0byBjb252ZXJ0XG4gICAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzIC0gdGhlIGFtb3VudCBvZiBkLnAgdG8gY29udmVydCB0bywgaWYgbmVnYXRpdmUgKGRlZmF1bHQpIGRvZXMgbm90IHJlc3RyaWN0IHRoZSBkZWNpbWFsIHBsYWNlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgY29udmVydFNlY29uZHNUb0hvdXJzKHNlY29uZHM6IG51bWJlciwgZGVjaW1hbFBsYWNlczogbnVtYmVyID0gLTEpOiBudW1iZXIge1xuICAgIGNvbnN0IGhvdXJzID0gc2Vjb25kcyAvIFRJTUVfQkFTRSAvIFRJTUVfQkFTRTtcblxuICAgIGlmIChkZWNpbWFsUGxhY2VzID49IDApIHtcbiAgICAgIHJldHVybiBOdW1iZXIoaG91cnMudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNvbnZlcnQgc2Vjb25kcyB0byBtaW5zXG4gICAqIEBwYXJhbSBzZWNvbmRzIC0gdG8gY29udmVydFxuICAgKiBAcGFyYW0gZGVjaW1hbFBsYWNlcyAtIHRoZSBhbW91bnQgb2YgZC5wIHRvIGNvbnZlcnQgdG8sIGlmIG5lZ2F0aXZlIChkZWZhdWx0KSBkb2VzIG5vdCByZXN0cmljdCB0aGUgZGVjaW1hbCBwbGFjZXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGNvbnZlcnRTZWNvbmRzVG9NaW5zKHNlY29uZHM6IG51bWJlciwgZGVjaW1hbFBsYWNlczogbnVtYmVyID0gLTEpOiBudW1iZXIge1xuICAgIGNvbnN0IGhvdXJzID0gc2Vjb25kcyAvIFRJTUVfQkFTRTtcblxuICAgIGlmIChkZWNpbWFsUGxhY2VzID49IDApIHtcbiAgICAgIHJldHVybiBOdW1iZXIoaG91cnMudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdXJzO1xuICB9XG5cbiAgYWRkUmFpbEFjdGlvblJ1bGVzKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSwgcnVsZXM6IFJ1bGVzW10pOiBPQlRSYWlsSm91cm5leUZhcmUge1xuICAgIHJldHVybiBydWxlcy5yZWR1Y2UoKGZhcmUxOiBPQlRSYWlsSm91cm5leUZhcmUsIHJ1bGU6IFJ1bGVzKSA9PiB7XG4gICAgICBpZiAoaXNTZXQocnVsZT8ucmVtb3ZlUmVzdWx0KSkge1xuICAgICAgICAgZmFyZTEucmVtb3ZlUmVzdWx0ID0gdHJ1ZVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoaXNTZXQocnVsZT8udW5hdmFpbGFibGUpKSB7XG4gICAgICAgIGZhcmUxLnVuYXZhaWxhYmxlID0gcnVsZS51bmF2YWlsYWJsZSBhcyBib29sZWFuO1xuICAgICAgICBmYXJlMS51bmF2YWlsYWJsZU1lc3NhZ2UgPSBydWxlLnVuYXZhaWxhYmxlTWVzc2FnZSBhcyBzdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1NldChydWxlPy50bWNQcmVmZXJyZWQpKSB7XG4gICAgICAgIGZhcmUxLnRtY1ByZWZlcnJlZCA9IHJ1bGUudG1jUHJlZmVycmVkIGFzIGJvb2xlYW47XG4gICAgICAgIGZhcmUxLnRtY1ByZWZlcnJlZE1lc3NhZ2UgPSBydWxlLnRtY1ByZWZlcnJlZE1lc3NhZ2UgYXMgc3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTZXQocnVsZT8uY29tcGFueVByZWZlcnJlZCkpIHtcbiAgICAgICAgZmFyZTEuY29tcGFueVByZWZlcnJlZCA9IHJ1bGUuY29tcGFueVByZWZlcnJlZCBhcyBib29sZWFuO1xuICAgICAgICBmYXJlMS5jb21wYW55UHJlZmVycmVkTWVzc2FnZSA9IHJ1bGUuY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgYXMgc3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTZXQocnVsZT8ub2ZmaWNlUHJlZmVycmVkKSkge1xuICAgICAgICBmYXJlMS5vZmZpY2VQcmVmZXJyZWQgPSBydWxlLm9mZmljZVByZWZlcnJlZCBhcyBib29sZWFuO1xuICAgICAgICBmYXJlMS5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlID0gcnVsZS5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIGFzIHN0cmluZztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU2V0KHJ1bGU/LnRtY1ByZWZlcnJlZExvZ29VcmwpKSB7XG4gICAgICAgIGZhcmUxLnRtY1ByZWZlcnJlZExvZ29VcmwgPSBydWxlLnRtY1ByZWZlcnJlZExvZ29VcmwgYXMgc3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTZXQocnVsZT8ucmVxdWlyZXNSZWFzb25LZXlzKSkge1xuICAgICAgICBmYXJlMS5yZXF1aXJlc1JlYXNvbktleXMgPSBydWxlLnJlcXVpcmVzUmVhc29uS2V5cztcbiAgICAgICAgZmFyZTEucmVxdWlyZXNSZWFzb25NZXNzYWdlcyA9IHJ1bGUucmVxdWlyZXNSZWFzb25NZXNzYWdlcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYXJlMTtcbiAgICB9LCBmYXJlKTtcbiAgfVxuXG4gIG1hcDxUPihvYmo6IFJlY29yZDxzdHJpbmcsIFQ+LCBmdW5jOiAobmV4dDogVCkgPT4gVCk6IFJlY29yZDxzdHJpbmcsIFQ+IHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgLi4uT2JqZWN0LmVudHJpZXMob2JqKS5tYXAoKFtrZXksIHZhbHVlXTogW3N0cmluZywgVF0pOiBSZWNvcmQ8c3RyaW5nLCBUPiA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW2tleV06IGZ1bmModmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBtZXJnZU9iamVjdHM8VD4oLi4ub2JqczogVFtdKTogVCB7XG4gICAgcmV0dXJuIG9ianMucmVkdWNlKChjdXJyZW50OiBULCBuZXh0OiBUKSA9PiB7XG4gICAgICByZXR1cm4gXy5tZXJnZShjdXJyZW50LCBuZXh0KSBhcyBUO1xuICAgIH0sIHt9IGFzIFQpO1xuICB9XG5cbiAgaW50ZXJjZXB0TWV0aG9kQ2FsbHM8VCBleHRlbmRzIG9iamVjdD4oXG4gICAgb2JqOiBULFxuICAgIGZuOiAocHJvcDogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBhcmc6IGFueVtdKSA9PiBhbnlcbiAgKTogVCB7XG4gICAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICAgIGdldCh0YXJnZXQ6IGFueSwgcHJvcDogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0W3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXRbcHJvcF0sIHtcbiAgICAgICAgICAgIGFwcGx5OiAodGFyZ2V0MSwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCkgPT4ge1xuICAgICAgICAgICAgICBmbihwcm9wLCBhcmd1bWVudHNMaXN0KTtcbiAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkodGFyZ2V0MSwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBwcmV2aW91cyBxdWFydGVyIGhvdXIgZS5nLiBpZiAyOSBtaW5zIC0gcmV0dXJuIDE1XG4gICAqIEBwYXJhbSBkYXRlVGltZSAtIGRhdGUvdGltZSBpbiBtb21lbnQgZm9ybWF0XG4gICAqIEByZXR1cm5zIG1vbWVudFxuICAgKi9cbiAgZ2V0Um91bmRlZERvd25RdWFydGVySG91cihkYXRlVGltZTogbW9tZW50Lk1vbWVudCk6IG1vbWVudC5Nb21lbnQge1xuICAgIGNvbnN0IG1pbnMgPSBkYXRlVGltZS5taW51dGVzKCk7XG5cbiAgICBpZiAobWlucyA8PSAxNSkge1xuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMCk7XG4gICAgfSBlbHNlIGlmIChtaW5zIDw9IDMwKSB7XG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAxNSk7XG4gICAgfSBlbHNlIGlmIChtaW5zIDw9IDQ1KSB7XG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAzMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDQ1KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVRpbWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHJvdW5kZWQgdXAgcXVhcnRlciBob3VyIGUuZy4gaWYgMjkgLSByZXR1cm4gMzBcbiAgICogQHBhcmFtIGRhdGVUaW1lIC0gZGF0ZS90aW1lIGluIG1vbWVudCBmb3JtYXRcbiAgICogQHJldHVybnMgbW9tZW50XG4gICAqL1xuICBnZXRSb3VuZGVkVXBRdWFydGVySG91cihkYXRlVGltZTogbW9tZW50Lk1vbWVudCk6IG1vbWVudC5Nb21lbnQge1xuICAgIGNvbnN0IG1pbnMgPSBkYXRlVGltZS5taW51dGVzKCk7XG5cbiAgICBpZiAobWlucyA8PSAxNSkge1xuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMTUpO1xuICAgIH0gZWxzZSBpZiAobWlucyA8PSAzMCkge1xuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMzApO1xuICAgIH0gZWxzZSBpZiAobWlucyA8PSA0NSkge1xuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgNDUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAwKTtcbiAgICAgIGRhdGVUaW1lLmFkZCgxLCAnaG91cicpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRlVGltZTtcbiAgfVxuXG4gIGNyZWF0ZUJsb2IoYmFzZTY0c3RyOiBzdHJpbmcsIGZpbGU6IHN0cmluZyk6IEJsb2Ige1xuICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjRzdHIpO1xuICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgYnl0ZU51bWJlcnNbaV0gPSBieXRlQ2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XG4gICAgcmV0dXJuIG5ldyBCbG9iKFtieXRlQXJyYXldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBwcmVmZXJyZWRNZXNzYWdlcyBmb3IgcmV0dXJuIER1YWxTaW5nbGVcbiAgICogQHBhcmFtIHNlbGVjdGVkVUlkIC0gb3V0Ym91bnQgRHVhbFNpbmdsZSBmbGlnaHRcbiAgICogQHBhcmFtIGl0ZW0gLSByZXR1cm4gRHVhbFNpbmdsZSBmbGlnaHQgaXRlbVxuICAgKiBAcGFyYW0gcnVsZUFjdGlvblN1bW1hcnkgLSBhcHBseUpJVEZsaWdodFJ1bGVzIHJ1bGVzXG4gICAqL1xuICBwcmVmZXJyZWREdWFsU2luZ2xlKFxuICAgIGl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIHNlbGVjdGVkVUlkOiBzdHJpbmcsXG4gICAgcnVsZUFjdGlvblN1bW1hcnk6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlXG4gICk6IFByZWZlcnJlZEZsYWdzIHtcbiAgICBpZiAoaXRlbS5qb3VybmV5SGFzaCAmJiBydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3NlbGVjdGVkVUlkXSkge1xuICAgICAgY29uc3QgcHJlZmVycmVkRmxhZ3MgPVxuICAgICAgICBydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3NlbGVjdGVkVUlkXVtpdGVtLmpvdXJuZXlIYXNoXSA/P1xuICAgICAgICAoe30gYXMgVW5hdmFpbGFibGUpO1xuXG4gICAgICBpdGVtLnByZWZlcnJlZCA9IHByZWZlcnJlZEZsYWdzLmNvbXBhbnlQcmVmZXJyZWRcbiAgICAgICAgPyBQcmVmZXJyZWRGbGFncy5jb21wYW55UHJlZmVycmVkXG4gICAgICAgIDogcHJlZmVycmVkRmxhZ3Mub2ZmaWNlUHJlZmVycmVkXG4gICAgICAgID8gUHJlZmVycmVkRmxhZ3Mub2ZmaWNlUHJlZmVycmVkXG4gICAgICAgIDogcHJlZmVycmVkRmxhZ3MudG1jUHJlZmVycmVkXG4gICAgICAgID8gUHJlZmVycmVkRmxhZ3MudG1jUHJlZmVycmVkXG4gICAgICAgIDogUHJlZmVycmVkRmxhZ3Mubm9uZTtcbiAgICAgIHJldHVybiBpdGVtLnByZWZlcnJlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByZWZlcnJlZEZsYWdzLm5vbmU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgcHJlZmVycmVkTWVzc2FnZXMgZm9yIHJldHVybiBEdWFsU2luZ2xlXG4gICAqIEBwYXJhbSBzZWxlY3RlZFVJZCAtIG91dGJvdW50IER1YWxTaW5nbGUgZmxpZ2h0XG4gICAqIEBwYXJhbSBpdGVtIC0gcmV0dXJuIER1YWxTaW5nbGUgZmxpZ2h0IGl0ZW1cbiAgICogQHBhcmFtIHJ1bGVBY3Rpb25TdW1tYXJ5IC0gYXBwbHlKSVRGbGlnaHRSdWxlcyBydWxlc1xuICAgKi9cbiAgcHJlZmVycmVkTWVzc2FnZXNEdWFsU2luZ2xlKFxuICAgIGl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIHNlbGVjdGVkVUlkOiBzdHJpbmcsXG4gICAgcnVsZUFjdGlvblN1bW1hcnk6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlXG4gICk6IFJlY29yZDxQcmVmZXJyZWRGbGFncywgc3RyaW5nPiB7XG4gICAgaWYgKGl0ZW0uam91cm5leUhhc2ggJiYgcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtzZWxlY3RlZFVJZF0pIHtcbiAgICAgIGNvbnN0IHByZWZlcnJlZEZsYWdzID1cbiAgICAgICAgcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtzZWxlY3RlZFVJZF1baXRlbS5qb3VybmV5SGFzaF0gPz9cbiAgICAgICAgKHt9IGFzIFVuYXZhaWxhYmxlKTtcblxuICAgICAgaXRlbS5wcmVmZXJyZWRNZXNzYWdlcyA9IHtcbiAgICAgICAgW1ByZWZlcnJlZEZsYWdzLmNvbXBhbnlQcmVmZXJyZWRdOiBwcmVmZXJyZWRGbGFncy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fCAnJyxcbiAgICAgICAgW1ByZWZlcnJlZEZsYWdzLm9mZmljZVByZWZlcnJlZF06IHByZWZlcnJlZEZsYWdzLm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgfHwgJycsXG4gICAgICAgIFtQcmVmZXJyZWRGbGFncy50bWNQcmVmZXJyZWRdOiBwcmVmZXJyZWRGbGFncy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8ICcnLFxuICAgICAgICBbUHJlZmVycmVkRmxhZ3MuYWxsXTpcbiAgICAgICAgICBgJHtwcmVmZXJyZWRGbGFncy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fCAnJ30gJHtcbiAgICAgICAgICAgIHByZWZlcnJlZEZsYWdzLm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgfHwgJydcbiAgICAgICAgICB9ICR7cHJlZmVycmVkRmxhZ3MudG1jUHJlZmVycmVkTWVzc2FnZSB8fCAnJ31gLnRyaW0oKSB8fCAnJyxcbiAgICAgICAgW1ByZWZlcnJlZEZsYWdzLm5vbmVdOiAnJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiBpdGVtLnByZWZlcnJlZE1lc3NhZ2VzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbUHJlZmVycmVkRmxhZ3MuY29tcGFueVByZWZlcnJlZF06ICcnLFxuICAgICAgICBbUHJlZmVycmVkRmxhZ3Mub2ZmaWNlUHJlZmVycmVkXTogJycsXG4gICAgICAgIFtQcmVmZXJyZWRGbGFncy50bWNQcmVmZXJyZWRdOiAnJyxcbiAgICAgICAgW1ByZWZlcnJlZEZsYWdzLmFsbF06ICcnLFxuICAgICAgICBbUHJlZmVycmVkRmxhZ3Mubm9uZV06ICcnXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHVuYXZhaWxhYmxlRHVhbFNpbmdsZSBmb3IgcmV0dXJuIER1YWxTaW5nbGVcbiAgICogQHBhcmFtIHNlbGVjdGVkVUlkIC0gb3V0Ym91bnQgRHVhbFNpbmdsZSBmbGlnaHRcbiAgICogQHBhcmFtIGl0ZW0gLSByZXR1cm4gRHVhbFNpbmdsZSBmbGlnaHQgaXRlbVxuICAgKiBAcGFyYW0gcnVsZUFjdGlvblN1bW1hcnkgLSBhcHBseUpJVEZsaWdodFJ1bGVzIHJ1bGVzXG4gICAqL1xuICB1bmF2YWlsYWJsZUR1YWxTaW5nbGUoXG4gICAgaXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgc2VsZWN0ZWRVSWQ6IHN0cmluZyxcbiAgICBydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGl0ZW0uam91cm5leUhhc2ggJiYgcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtzZWxlY3RlZFVJZF0pIHtcbiAgICAgIGNvbnN0IHVuYXZhaWxhYmxlRmxhZ3MgPVxuICAgICAgICBydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3NlbGVjdGVkVUlkXVtpdGVtLmpvdXJuZXlIYXNoXSA/P1xuICAgICAgICAoe30gYXMgVW5hdmFpbGFibGUpO1xuICAgICAgcmV0dXJuIChpdGVtLnVuYXZhaWxhYmxlID0gdW5hdmFpbGFibGVGbGFncy51bmF2YWlsYWJsZSB8fCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCByZW1vdmVSZXN1bHRzRHVhbFNpbmdsZSBmb3IgcmV0dXJuIER1YWxTaW5nbGVcbiAgICogQHBhcmFtIHNlbGVjdGVkVUlkIC0gb3V0Ym91bnQgRHVhbFNpbmdsZSBmbGlnaHRcbiAgICogQHBhcmFtIGl0ZW0gLSByZXR1cm4gRHVhbFNpbmdsZSBmbGlnaHQgaXRlbVxuICAgKiBAcGFyYW0gcnVsZUFjdGlvblN1bW1hcnkgLSBhcHBseUpJVEZsaWdodFJ1bGVzIHJ1bGVzXG4gICAqL1xuICByZW1vdmVSZXN1bHRzRHVhbFNpbmdsZShcbiAgICBpdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBzZWxlY3RlZFVJZDogc3RyaW5nLFxuICAgIHJ1bGVBY3Rpb25TdW1tYXJ5OiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoaXRlbS5qb3VybmV5SGFzaCAmJiBydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3NlbGVjdGVkVUlkXSkge1xuICAgICAgY29uc3QgcmVtb3ZlUmVzdWx0c0ZsYWcgPVxuICAgICAgICBydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3NlbGVjdGVkVUlkXVtpdGVtLmpvdXJuZXlIYXNoXSA/P1xuICAgICAgICAoe30gYXMgVW5hdmFpbGFibGUpO1xuICAgICAgcmV0dXJuIChpdGVtLnJlbW92ZVJlc3VsdCA9IHJlbW92ZVJlc3VsdHNGbGFnLnJlbW92ZVJlc3VsdCB8fCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHJlcXVpcmVzUmVhc29uRHVhbFNpbmdsZSBmb3IgcmV0dXJuIER1YWxTaW5nbGVcbiAgICogQHBhcmFtIHNlbGVjdGVkVUlkIC0gb3V0Ym91bnQgRHVhbFNpbmdsZSBmbGlnaHRcbiAgICogQHBhcmFtIGl0ZW0gLSByZXR1cm4gRHVhbFNpbmdsZSBmbGlnaHQgaXRlbVxuICAgKiBAcGFyYW0gcnVsZUFjdGlvblN1bW1hcnkgLSBhcHBseUpJVEZsaWdodFJ1bGVzIHJ1bGVzXG4gICAqL1xuICByZXF1aXJlc1JlYXNvbkR1YWxTaW5nbGUoXG4gICAgaXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgc2VsZWN0ZWRVSWQ6IHN0cmluZyxcbiAgICBydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2VcbiAgKTogc3RyaW5nW10ge1xuICAgIGlmIChpdGVtLmpvdXJuZXlIYXNoICYmIHJ1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbc2VsZWN0ZWRVSWRdKSB7XG4gICAgICBjb25zdCByZXF1aXJlc1JlYXNvbkZsYWdzID1cbiAgICAgICAgcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtzZWxlY3RlZFVJZF1baXRlbS5qb3VybmV5SGFzaF0gPz9cbiAgICAgICAgKHt9IGFzIFVuYXZhaWxhYmxlKTtcbiAgICAgIHJldHVybiBpdGVtLnJlcXVpcmVzUmVhc29uS2V5cyA9IHJlcXVpcmVzUmVhc29uRmxhZ3MucmVxdWlyZXNSZWFzb25LZXlzIHx8IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCByZXF1aXJlc1JlYXNvbk1lc3NhZ2VEdWFsU2luZ2xlIGZvciByZXR1cm4gRHVhbFNpbmdsZVxuICAgKiBAcGFyYW0gc2VsZWN0ZWRVSWQgLSBvdXRib3VudCBEdWFsU2luZ2xlIGZsaWdodFxuICAgKiBAcGFyYW0gaXRlbSAtIHJldHVybiBEdWFsU2luZ2xlIGZsaWdodCBpdGVtXG4gICAqIEBwYXJhbSBydWxlQWN0aW9uU3VtbWFyeSAtIGFwcGx5SklURmxpZ2h0UnVsZXMgcnVsZXNcbiAgICovXG4gIHJlcXVpcmVzUmVhc29uTWVzc2FnZUR1YWxTaW5nbGUoXG4gICAgaXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgc2VsZWN0ZWRVSWQ6IHN0cmluZyxcbiAgICBydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2VcbiAgKTogc3RyaW5nW10ge1xuICAgIGlmIChpdGVtLmpvdXJuZXlIYXNoICYmIHJ1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbc2VsZWN0ZWRVSWRdKSB7XG4gICAgICBjb25zdCByZXF1aXJlc1JlYXNvbk1lc3NhZ2VGbGFncyA9XG4gICAgICAgIHJ1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbc2VsZWN0ZWRVSWRdW2l0ZW0uam91cm5leUhhc2hdID8/XG4gICAgICAgICh7fSBhcyBVbmF2YWlsYWJsZSk7XG4gICAgICByZXR1cm4gKGl0ZW0ucmVxdWlyZXNSZWFzb25NZXNzYWdlcyA9IHJlcXVpcmVzUmVhc29uTWVzc2FnZUZsYWdzLnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgfHwgW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB1bmF2YWlsYWJsZU1lc3NhZ2VEdWFsU2luZ2xlIGZvciByZXR1cm4gRHVhbFNpbmdsZVxuICAgKiBAcGFyYW0gc2VsZWN0ZWRVSWQgLSBvdXRib3VudCBEdWFsU2luZ2xlIGZsaWdodFxuICAgKiBAcGFyYW0gaXRlbSAtIHJldHVybiBEdWFsU2luZ2xlIGZsaWdodCBpdGVtXG4gICAqIEBwYXJhbSBydWxlQWN0aW9uU3VtbWFyeSAtIGFwcGx5SklURmxpZ2h0UnVsZXMgcnVsZXNcbiAgICovXG4gIHVuYXZhaWxhYmxlTWVzc2FnZUR1YWxTaW5nbGUoXG4gICAgaXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgc2VsZWN0ZWRVSWQ6IHN0cmluZyxcbiAgICBydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2VcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoaXRlbS5qb3VybmV5SGFzaCAmJiBydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3NlbGVjdGVkVUlkXSkge1xuICAgICAgY29uc3QgdW5hdmFpbGFibGVNZXNzYWdlRmxhZ3MgPVxuICAgICAgICBydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3NlbGVjdGVkVUlkXVtpdGVtLmpvdXJuZXlIYXNoXSA/P1xuICAgICAgICAoe30gYXMgVW5hdmFpbGFibGUpO1xuICAgICAgcmV0dXJuIChpdGVtLnVuYXZhaWxhYmxlTWVzc2FnZSA9IHVuYXZhaWxhYmxlTWVzc2FnZUZsYWdzLnVuYXZhaWxhYmxlTWVzc2FnZSB8fCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHByZWZlcmVuY2VMZXZlbCBmb3IgcmV0dXJuIER1YWxTaW5nbGVcbiAgICogQHBhcmFtIHNlbGVjdGVkVUlkIC0gb3V0Ym91bnQgRHVhbFNpbmdsZSBmbGlnaHRcbiAgICogQHBhcmFtIGl0ZW0gLSByZXR1cm4gRHVhbFNpbmdsZSBmbGlnaHQgaXRlbVxuICAgKiBAcGFyYW0gcnVsZUFjdGlvblN1bW1hcnkgLSBhcHBseUpJVEZsaWdodFJ1bGVzIHJ1bGVzXG4gICAqL1xuICBwcmVmZXJlbmNlTGV2ZWxEdWFsU2luZ2xlKFxuICAgIGl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIHNlbGVjdGVkVUlkOiBzdHJpbmcsXG4gICAgcnVsZUFjdGlvblN1bW1hcnk6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlXG4gICk6IFByZWZlcnJlZEZsYWdzIHtcbiAgICBpZiAoaXRlbS5qb3VybmV5SGFzaCAmJiBydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3NlbGVjdGVkVUlkXSkge1xuICAgICAgY29uc3QgcHJlZmVyZW5jZUxldmVsID1cbiAgICAgICAgK3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbc2VsZWN0ZWRVSWRdW2l0ZW0uam91cm5leUhhc2hdPy5wcmVmZXJlbmNlTGV2ZWwgfHxcbiAgICAgICAgbnVsbDtcbiAgICAgIHJldHVybiBwcmVmZXJlbmNlTGV2ZWw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICogUmVtb3ZlIHRoZSB0aW1lem9uZSBwYXJ0IGluIHRoZSBkYXRldGltZSBzdHJpbmdcbiAgICogKiBUcmF2ZWxwb3J0IHJlc3VsdHMgYXJyaXZlIHdpdGggdGhlIGZvcm1hdCB0aW1lKy8tdGltZXpvbmUsIHdoaWNoIG1lc3NlcyB3aXRoIHRoZSByZXN1bHRzLlxuICAgKiAqIFRoaXMgbWV0aG9kIGp1c3QgcmVtb3ZlcyB0aGUgKy8tdGltZXpvbmUgc28gdGhhdCB3ZSBkaXNwbGF5IHRoZSBsb2NhbCB0aW1lLCBub3QgdGhlIEdNVCB0aW1lXG4gICAqIEBwYXJhbSBkYXRlVGltZVxuICAgKiBAcmV0dXJucyBzdHJpbmdcbiAgICovXG4gIHNhbml0aXNlRGF0ZVRpbWUoZGF0ZVRpbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGUgPSBkYXRlVGltZS5zcGxpdCgnVCcpWzBdO1xuICAgICAgY29uc3QgdGltZSA9IGRhdGVUaW1lLnNwbGl0KCdUJylbMV07XG5cbiAgICAgIGNvbnN0IGRlbGltaXR0ZXIgPSB0aW1lLmluY2x1ZGVzKCcrJykgPyAnKycgOiB0aW1lLmluY2x1ZGVzKCctJykgPyAnLScgOiBudWxsO1xuICAgICAgaWYgKGRlbGltaXR0ZXIpIHtcbiAgICAgICAgcmV0dXJuIGAke2RhdGV9VCR7dGltZS5zcGxpdChkZWxpbWl0dGVyKVswXX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRhdGVUaW1lO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZygnU2FuaXRpc2luZyBmbGlnaHQgdGltZSBmYWllbGQnLCBkYXRlVGltZSk7XG4gICAgICByZXR1cm4gZGF0ZVRpbWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBTcGVjaWFsRmFyZSAoUHJpdmF0ZSBmYXJlKVxuICAgKiBAcGFyYW0gZmxpZ2h0IC0gRmxpZ2h0SXRpbmVyYXJ5XG4gICAqL1xuICBnZXRTcGVjaWFsRmFyZShmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBmbGlnaHQ/Lm91dGJvdW5kRmxpZ2h0c1swXT8uZmFyZUluZm8/LnR5cGUgPT09ICdQcml2YXRlJyB8fFxuICAgICAgZmxpZ2h0Py5pbmJvdW5kRmxpZ2h0c1swXT8uZmFyZUluZm8/LnR5cGUgPT09ICdQcml2YXRlJyB8fFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgdGhlIF9fdHlwZW5hbWUgcHJvcGVydGllcyBpbiB0aGUgb2JqZWN0IGRlZXBseVxuICAgKiBAcGFyYW0gb2JqXG4gICAqIEByZXR1cm5zIG9iamVjdFxuICAgKi9cbiAgcmVtb3ZlVHlwZU5hbWUob2JqOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkob2JqLCAobmFtZSwgdmFsKSA9PiB7XG4gICAgICAgIGlmIChuYW1lID09PSAnX190eXBlbmFtZScpIHtcbiAgICAgICAgICBkZWxldGUgdmFsW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGZpbmRIaWdoZXN0VmFsdWVGcm9tT2JqKG9iajogYW55KTogYW55IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKGEsIGIpID0+IChvYmpbYV0gPiBvYmpbYl0gPyBhIDogYikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNhbGN1bGF0aW9uIG9mIHRoZSBhdmVyYWdlIHZhbHVlIGZvciBhbGwgZWxlbWVudHMgb2YgdGhlIGFycmF5XG4gICAqIEBwYXJhbSByZXN1bHRzIC0gYW4gYXJyYXkgb2YgcmVzdWx0cyBmb3IgdGhlIHNlbGVjdGVkIHByb2R1Y3QoUmFpbCwgRXVyb3N0YXIsIENhciBIaXJlLCBUYXhpLCBIb3RlbClcbiAgICogQHJldHVybnMgLSB0aGUgYXZlcmFnZSBDTzIgZW1pc3Npb25zIHBlciBpdGVtLCByb3VuZGVkIHRvIHR3byBkZWNpbWFsIHBsYWNlcy5cbiAgICovXG4gIGNhbGN1bGF0ZUF2ZXJhZ2VDbzJQZXJJdGVtKHJlc3VsdHM6IGFueVtdKTogbnVtYmVyIHtcbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUud2FybignKysrIE5vIHJlc3VsdHMgc3VwcGxpZWQgdG8gYXZlcmFnZSBjbzIgY2FsY3VsYXRpb24gLSByZXR1cm5pbmcgMCArKysnKTtcbiAgICAgIC8vIHRocm93IG5ldyBFcnJvcignVGhlIGFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgaXRlbS4nKTsgIC8vICEgLSBUaGlzIHdhcyBjYXVzaW5nIGVycm9ycyBpbiB0aGUgY29uc3RydWN0b3JzIG9mIG91ciBzZWFyY2hlcyAtIHJlc3VsdGluZyBpbiBhbGwgc29ydHMgb2YgZnVua3kgaXNzdWVzXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBsZXQgc3VtID0gMDtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmVzdWx0cykge1xuICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5jbzJQZXJJdGVtKSB7XG4gICAgICAgIHN1bSArPSBpdGVtLmNvMlBlckl0ZW07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiArKHN1bSAvIHJlc3VsdHMubGVuZ3RoKS50b0ZpeGVkKDIpO1xuICB9XG5cbiAgZ2V0RmxpZ2h0c0ZvckZhcmVSdWxlcyhmbGlnaHQ6IEZsaWdodEpvdXJuZXksIGFsbEZsaWdodHM6IEJhc2tldEl0ZW0pOiBGbGlnaHRKb3VybmV5W10ge1xuICAgIGNvbnN0IGZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSA9IFtdO1xuXG4gICAgY29uc3QgaXNPdXRib3VuZCA9IGFsbEZsaWdodHMuZGV0YWlsLm91dGJvdW5kRmxpZ2h0cy5zb21lKChpdGVtOiBGbGlnaHRKb3VybmV5KSA9PlxuICAgICAgaXRlbS5pZC5pbmNsdWRlcyhmbGlnaHQuaWQpXG4gICAgKTtcbiAgICBjb25zdCBpc0luYm91bmQgPSBhbGxGbGlnaHRzLmRldGFpbC5pbmJvdW5kRmxpZ2h0cy5zb21lKChpdGVtOiBGbGlnaHRKb3VybmV5KSA9PlxuICAgICAgaXRlbS5pZC5pbmNsdWRlcyhmbGlnaHQuaWQpXG4gICAgKTtcblxuICAgIC8vIElmIGFsbCB0aGUgbGVncyBoYXZlIHRoZSBzYW1lIE1hcmtldGluZ0NhcnJpZXIgYW5kIEZhcmVCYXNpc0NvZGUsIHdlIG5lZWQgdG8gc2VuZCB0aGUgd2hvbGUgam91cm5leTsgb3RoZXJ3aXNlLCBzZW5kIHRoZSBwYXJ0aWN1bGFyIGxlZ1xuICAgIGlmIChpc091dGJvdW5kKSB7XG4gICAgICBjb25zdCBvdXRib3VuZEZsaWdodHMgPSBhbGxGbGlnaHRzLmRldGFpbC5vdXRib3VuZEZsaWdodHM7XG4gICAgICBpZiAoXG4gICAgICAgIG91dGJvdW5kRmxpZ2h0cy5ldmVyeShcbiAgICAgICAgICAoaXRlbTogSW5wdXRGbGlnaHRKb3VybmV5KSA9PlxuICAgICAgICAgICAgaXRlbT8ubWFya2V0aW5nQ2FycmllciA9PT0gb3V0Ym91bmRGbGlnaHRzWzBdLm1hcmtldGluZ0NhcnJpZXIgJiZcbiAgICAgICAgICAgIGl0ZW0uZmFyZUJhc2lzQ29kZSA9PT0gb3V0Ym91bmRGbGlnaHRzWzBdLmZhcmVCYXNpc0NvZGVcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGZsaWdodHMucHVzaCguLi5vdXRib3VuZEZsaWdodHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmxpZ2h0cy5wdXNoKGZsaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0luYm91bmQpIHtcbiAgICAgIGNvbnN0IGluYm91bmRGbGlnaHRzID0gYWxsRmxpZ2h0cy5kZXRhaWwuaW5ib3VuZEZsaWdodHM7XG4gICAgICBpZiAoXG4gICAgICAgIGluYm91bmRGbGlnaHRzLmV2ZXJ5KFxuICAgICAgICAgIChpdGVtOiBJbnB1dEZsaWdodEpvdXJuZXkpID0+XG4gICAgICAgICAgICBpdGVtLm1hcmtldGluZ0NhcnJpZXIgPT09IGluYm91bmRGbGlnaHRzWzBdLm1hcmtldGluZ0NhcnJpZXIgJiZcbiAgICAgICAgICAgIGl0ZW0uZmFyZUJhc2lzQ29kZSA9PT0gaW5ib3VuZEZsaWdodHNbMF0uZmFyZUJhc2lzQ29kZVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgZmxpZ2h0cy5wdXNoKC4uLmluYm91bmRGbGlnaHRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZsaWdodHMucHVzaChmbGlnaHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmbGlnaHRzLnB1c2goZmxpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZsaWdodHM7XG4gIH1cblxuICBmbGlwTnVtYmVyc0ZvclByZWZlcnJlZChpbmJvdW5kTnVtYmVyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBCYXNlSGVscGVyUm91dGluZXMucHJlZmVycmVkRmxpcFsnJyArIGluYm91bmROdW1iZXJdIHx8IGluYm91bmROdW1iZXI7XG4gIH1cblxuICBmaW5kU2VydmljZVR5cGUoYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IFNlcnZpY2VUeXBlIHtcbiAgICBpZiAoYmFza2V0SXRlbT8uc2VydmljZT8udHlwZSkgcmV0dXJuIGJhc2tldEl0ZW0/LnNlcnZpY2U/LnR5cGU7XG4gICAgY29uc3QgZGV0YWlsID0gYmFza2V0SXRlbS5kZXRhaWw7XG4gICAgY29uc3QgaXNFdXJvc3RhciA9IGRldGFpbD8ub3V0Ym91bmRGbGlnaHRzPy5sZW5ndGhcbiAgICAgID8gZGV0YWlsPy5vdXRib3VuZEZsaWdodHNbMF0/Lm9wZXJhdGluZ0NhcnJpZXJOYW1lPy50b1VwcGVyQ2FzZSgpID09PSBTZXJ2aWNlVHlwZS5FdXJvc3RhclxuICAgICAgOiBmYWxzZTtcbiAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgISFkZXRhaWw/LnZlaGljbGVUeXBlOlxuICAgICAgICByZXR1cm4gU2VydmljZVR5cGUuQ2FiO1xuICAgICAgY2FzZSAhIWRldGFpbD8uaG90ZWxBZGRyZXNzOlxuICAgICAgICByZXR1cm4gU2VydmljZVR5cGUuSG90ZWw7XG4gICAgICBjYXNlICEhZGV0YWlsPy5vdXR3YXJkRGV0YWlsOlxuICAgICAgICByZXR1cm4gU2VydmljZVR5cGUuUmFpbDtcbiAgICAgIGNhc2UgISFkZXRhaWw/LnZlbmRvck5hbWU6XG4gICAgICAgIHJldHVybiBTZXJ2aWNlVHlwZS5DYXI7XG4gICAgICBjYXNlICEhZGV0YWlsPy5kZXBhcnREYXRldGltZTpcbiAgICAgICAgcmV0dXJuIFNlcnZpY2VUeXBlLlBhcmtpbmc7XG4gICAgICBjYXNlIGlzRXVyb3N0YXI6XG4gICAgICAgIHJldHVybiBTZXJ2aWNlVHlwZS5FdXJvc3RhcjtcbiAgICAgIGNhc2UgISFkZXRhaWw/Lm91dGJvdW5kRmxpZ2h0czpcbiAgICAgICAgcmV0dXJuIFNlcnZpY2VUeXBlLkZsaWdodDtcbiAgICAgIGNhc2UgISFkZXRhaWw/LmRlc3RpbmF0aW9uOlxuICAgICAgICByZXR1cm4gU2VydmljZVR5cGUuTG91bmdlO1xuICAgICAgY2FzZSBkZXRhaWw/LmFycml2YWxEYXRldGltZSAmJiAhZGV0YWlsPy5kZXN0aW5hdGlvbjpcbiAgICAgICAgcmV0dXJuIFNlcnZpY2VUeXBlLkZhc3RUcmFjaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldEFnZXNBcnJheShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHtuYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXJ9W10ge1xuICAgIGNvbnN0IGFnZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgIGFnZXMucHVzaCh7bmFtZTogYCR7aX0geWVhcnNgLCB2YWx1ZTogaX0pO1xuICAgIH1cbiAgICByZXR1cm4gYWdlcztcbiAgfVxuICBjb252ZXJ0RmxpZ2h0Sm91cm5leVRvSW5wdXRGbGlnaHRKb3VybmV5KGZsaWdodDogRmxpZ2h0Sm91cm5leSk6IElucHV0RmxpZ2h0Sm91cm5leSB7XG4gICAgY29uc3QgaW5wdXRGbGlnaHRKb3VybmV5OiBJbnB1dEZsaWdodEpvdXJuZXkgPSB7XG4gICAgICBhZGRpdGlvbmFsOiBmbGlnaHQuYWRkaXRpb25hbCwgXG4gICAgICBib29raW5nQ29kZTogZmxpZ2h0LmJvb2tpbmdDb2RlLFxuICAgICAgY2FiaW5DbGFzczogZmxpZ2h0LmNhYmluQ2xhc3MsXG4gICAgICBjYWJpbkNvZGU6IGZsaWdodC5jYWJpbkNvZGUsXG4gICAgICBjYWJpblJhdzogZmxpZ2h0LmNhYmluUmF3LFxuICAgICAgZGF0ZVRpbWVBcnJpdmluZzogZmxpZ2h0LmRhdGVUaW1lQXJyaXZpbmcsXG4gICAgICBkYXRlVGltZUFycml2aW5nVVRDOiBmbGlnaHQuZGF0ZVRpbWVBcnJpdmluZ1VUQyxcbiAgICAgIGRhdGVUaW1lRGVwYXJ0aW5nOiBmbGlnaHQuZGF0ZVRpbWVEZXBhcnRpbmcsXG4gICAgICBkYXRlVGltZURlcGFydGluZ1VUQzogZmxpZ2h0LmRhdGVUaW1lRGVwYXJ0aW5nVVRDLFxuICAgICAgZGVzdGluYXRpb25BaXJwb3J0OiBmbGlnaHQuZGVzdGluYXRpb25BaXJwb3J0LFxuICAgICAgZGVzdGluYXRpb25BaXJwb3J0RGV0YWlsOiBmbGlnaHQuZGVzdGluYXRpb25BaXJwb3J0RGV0YWlsLFxuICAgICAgZGVzdGluYXRpb25BaXJwb3J0TmFtZTogZmxpZ2h0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWUsXG4gICAgICBkZXN0aW5hdGlvblRlcm1pbmFsOiBmbGlnaHQuZGVzdGluYXRpb25UZXJtaW5hbCxcbiAgICAgIGVxdWlwbWVudENvZGU6IGZsaWdodC5lcXVpcG1lbnRDb2RlLFxuICAgICAgZXF1aXBtZW50TmFtZTogZmxpZ2h0LmVxdWlwbWVudE5hbWUsXG4gICAgICBmYXJlQmFzaXNDb2RlOiBmbGlnaHQuZmFyZUJhc2lzQ29kZSxcbiAgICAgIGZhcmVDb25kaXRpb25zOiBmbGlnaHQuZmFyZUNvbmRpdGlvbnMsXG4gICAgICBmYXJlSW5mbzogZmxpZ2h0LmZhcmVJbmZvLFxuICAgICAgZ292ZXJuaW5nQ2FycmllcjogZmxpZ2h0LmdvdmVybmluZ0NhcnJpZXIsXG4gICAgICBpZDogZmxpZ2h0LmlkID8gZmxpZ2h0LmlkIDogJycsXG4gICAgICBtYXJrZXRpbmdDYXJyaWVyOiBmbGlnaHQubWFya2V0aW5nQ2FycmllcixcbiAgICAgIG1hcmtldGluZ0NhcnJpZXJEZXRhaWw6IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyRGV0YWlsLFxuICAgICAgbWFya2V0aW5nQ2Fycmllck5hbWU6IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyTmFtZSxcbiAgICAgIG1hcmtldGluZ0ZsaWdodE51bWJlcjogZmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlcixcbiAgICAgIG1hcmtldGluZ05hbWVzOiBmbGlnaHQubWFya2V0aW5nTmFtZXMsXG4gICAgICBtYXJyaWFnZUdyb3VwOiBmbGlnaHQubWFycmlhZ2VHcm91cCxcbiAgICAgIG9wZXJhdGluZ0NhcnJpZXI6IGZsaWdodC5vcGVyYXRpbmdDYXJyaWVyLFxuICAgICAgb3BlcmF0aW5nQ2FycmllckRldGFpbDogZmxpZ2h0Lm9wZXJhdGluZ0NhcnJpZXJEZXRhaWwsXG4gICAgICBvcGVyYXRpbmdDYXJyaWVyTmFtZTogZmxpZ2h0Lm9wZXJhdGluZ0NhcnJpZXJOYW1lLFxuICAgICAgb3BlcmF0aW5nRmxpZ2h0TnVtYmVyOiBmbGlnaHQub3BlcmF0aW5nRmxpZ2h0TnVtYmVyLFxuICAgICAgb3JpZ2luQWlycG9ydDogZmxpZ2h0Lm9yaWdpbkFpcnBvcnQsXG4gICAgICBvcmlnaW5BaXJwb3J0RGV0YWlsOiBmbGlnaHQub3JpZ2luQWlycG9ydERldGFpbCxcbiAgICAgIG9yaWdpbkFpcnBvcnROYW1lOiBmbGlnaHQub3JpZ2luQWlycG9ydE5hbWUsXG4gICAgICBvcmlnaW5UZXJtaW5hbDogZmxpZ2h0Lm9yaWdpblRlcm1pbmFsLFxuICAgICAgc2VhdHNBdmFpbGFibGU6IGZsaWdodC5zZWF0c0F2YWlsYWJsZSxcbiAgICAgIHN0b3BzOiBmbGlnaHQuc3RvcHMsXG4gICAgICB0b3RhbER1cmF0aW9uOiBmbGlnaHQudG90YWxEdXJhdGlvbixcbiAgICAgIHZlbmRvckNvZGU6IGZsaWdodC52ZW5kb3JDb2RlXG4gICAgfVxuXG4gICAgcmV0dXJuIGlucHV0RmxpZ2h0Sm91cm5leTtcbiAgfVxuXG4gIGNvbnZlcnRUcmF2ZWxsZXJzVG9UcmF2ZWxsZXJBcmdzKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKTogVHJhdmVsbGVyQXJnW10ge1xuICAgIHJldHVybiB0cmF2ZWxsZXJzLm1hcCh0cmF2ZWxsZXIgPT4gPFRyYXZlbGxlckFyZz57XG4gICAgICBpZDogdHJhdmVsbGVyLmlkXG4gICAgfSlcbiAgfVxuICBcbiAgICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gcmVwbGFjZXMgZ2VybWFuIGxldHRlcnMgd2l0aCBhY2NlbnRzXG4gICAqIEBwYXJhbSBjaXR5TmFtZSAtIHN0cmluZyBvZiBzZWFyY2hlZCBmb3IgY2l0eW5hbWVcbiAgICovXG4gICAgbm9ybWFsaXplQ2l0eU5hbWVFKGNpdHlOYW1lOnN0cmluZykge1xuICAgICAgcmV0dXJuIGNpdHlOYW1lXG4gICAgICAgIC5yZXBsYWNlKC/DpC9naSwgJ2FlJylcbiAgICAgICAgLnJlcGxhY2UoL8O2L2dpLCAnb2UnKVxuICAgICAgICAucmVwbGFjZSgvw7wvZ2ksICd1ZScpO1xuICAgIH1cblxuICAgICAgICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gcmVwbGFjZXMgZ2VybWFuIGxldHRlcnMgd2l0aCBhY2NlbnRzXG4gICAqIEBwYXJhbSBjaXR5TmFtZSAtIHN0cmluZyBvZiBzZWFyY2hlZCBmb3IgY2l0eW5hbWVcbiAgICovXG4gICAgICAgIG5vcm1hbGl6ZUNpdHlOYW1lKGNpdHlOYW1lOnN0cmluZykge1xuICAgICAgICAgIHJldHVybiBjaXR5TmFtZVxuICAgICAgICAgICAgLnJlcGxhY2UoL8OkL2dpLCAnYScpXG4gICAgICAgICAgICAucmVwbGFjZSgvw7YvZ2ksICdvJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC/DvC9naSwgJ3UnKTtcbiAgICAgICAgfVxuIFxufVxuXG5mdW5jdGlvbiBpc1NldChvYmo6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsO1xufVxuXG4iXX0=
|
|
1997
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFjLE1BQU0sUUFBUSxDQUFDO0FBT3BDLE9BQU8sRUFDTCxtQkFBbUIsRUFLbkIsbUJBQW1CLEVBSW5CLGNBQWMsRUFHZCxjQUFjLEVBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBTUwsZ0JBQWdCLEVBR2hCLGFBQWEsRUFHYixXQUFXLEVBSVosTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFPakQsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7QUFDdEMsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFDcEMsTUFBTSw0QkFBNEIsR0FBRyxFQUFFLENBQUM7QUFDeEMsTUFBTSx5QkFBeUIsR0FBRyxFQUFFLENBQUM7QUFDckMsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLENBQUM7QUFDdkMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLENBQUM7QUFDdEMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFDcEMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUM7QUFDckMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLENBQUM7QUFDdkMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUM7QUFDeEMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUVqRyxNQUFNLE9BQU8sa0JBQWtCO0lBeUI3QixhQUFhLENBQUMsSUFBWTtRQUN4QixPQUFPLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVc7UUFDbkIsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNqRCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVk7UUFDeEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFXLEVBQUUsR0FBRyxJQUFXO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FDaEIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUNuQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDekM7YUFDRjtZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsRUFDRCxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUM3QyxDQUFDLElBQUksQ0FBQztJQUNULENBQUM7SUFFRCxXQUFXLENBQUMsR0FBRyxVQUFpQjtRQUM5QixPQUFPLFVBQVU7YUFDZCxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNuQixHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQzthQUNuQjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUNMLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsZUFBZSxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ2xDLElBQUk7WUFDRixPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVksRUFBRSxHQUFXLEVBQUUsS0FBYTtRQUNoRCxPQUFPLEtBQUs7YUFDVCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxFQUFFLENBQUM7SUFDWCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVU7UUFDckIsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQztZQUMxQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtTQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFZO1FBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBVTtRQUM1QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFtQjtRQUM1QixJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQW1CO1FBQzVCLElBQUk7WUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDcEQ7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQW1CO1FBQ2pDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFtQjtRQUMvQixJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBbUI7UUFDbkMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBbUI7UUFDdkMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQseUJBQXlCLENBQUMsSUFBbUI7UUFDM0MsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsd0JBQXdCLENBQUMsSUFBbUI7UUFDMUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDcEYsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFtQjtRQUN4QyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDNUMsTUFBTSxhQUFhLEdBQWEsRUFBRSxDQUFDO1FBQ25DLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQzNDLEtBQUssSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUUsTUFBTSxJQUFJLElBQUksRUFBRTtnQkFDaEQsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUM5RDtTQUNGO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUE0QjtRQUN6QyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQW1CO1FBQzlCLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFtQixFQUFFLElBQWE7UUFDL0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLElBQUksRUFBRTtZQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDdEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRTtpQkFBTTtnQkFDTCxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3RjtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUM3RSxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQTJCO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDMUIsT0FBTyxJQUFJLElBQUksQ0FDYixNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDMUIsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUM1QyxPQUFPLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDOUMsT0FBTyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWE7UUFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDN0MsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQzthQUNuQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO2FBQzFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVk7UUFDL0IsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixPQUFPLE1BQU0sQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsT0FBTyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELG9CQUFvQixDQUFDLENBQVM7UUFDNUIsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sQ0FBQyxHQUFHLG1DQUFtQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUMsQ0FBQztJQUVELGlCQUFpQixDQUFDLENBQVM7UUFDekIsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sQ0FBQyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0QyxDQUFDO0lBRUQsWUFBWSxDQUFDLENBQVM7UUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQztJQUNwRSxDQUFDO0lBRUQsS0FBSyxDQUFVLE9BQVU7UUFDdkIsb0RBQW9EO1FBQ3BELE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQU0sQ0FBQztJQUNuQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBWSxFQUFFLFlBQW9DO1FBQ2xFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDdkQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFzQixNQUFNLEVBQUUsRUFBRSxjQUFjLEdBQUcsRUFBRTtRQUNoRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0Q7OztrR0FHOEY7SUFDOUYsa0JBQWtCLENBQUMsS0FBYTtRQUM5QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakMsT0FBTyxZQUFZLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQixVQUFVLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELEVBQUU7UUFDQSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO2FBQzdDLFFBQVEsQ0FBQyxFQUFFLENBQUM7YUFDWixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQVk7UUFDaEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzVEO2FBQU07WUFDTCxPQUFPLEVBQUUsQ0FBQztTQUNYO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFHLElBQVc7UUFDdkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQzNELElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDMUI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFtQixFQUFFLEtBQWE7UUFDbkQsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDZCxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNyQjtRQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFTLEVBQUUsUUFBYTtRQUM1QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVk7UUFDbEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxPQUFPLEtBQUs7YUFDVCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ2pDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQzthQUNuQztZQUNELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNmLEdBQUcsSUFBSSxJQUFJLENBQUM7YUFDYjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsR0FBVztRQUN4QyxNQUFNLEdBQUcsR0FBRztZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDdEMsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO1FBQ0YsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1QsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3hDO2lCQUFNO2dCQUNMLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ1QsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzNDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNqQztxQkFBTTtvQkFDTCxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNsQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDbkM7YUFDRjtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQW9CLEVBQUUsR0FBa0I7UUFDbEQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsVUFBVSxDQUNSLENBQU0sRUFDTixDQUE0QyxFQUM1QyxHQUFZO1FBRVosTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLE1BQU0sS0FBSyxHQUFHLEdBQWUsRUFBRTtZQUM3QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNiLE9BQU87YUFDUjtZQUNELE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDcEIsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLE9BQU8sQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7WUFDbkMsTUFBTSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLEVBQUU7Z0JBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQjtpQkFBTTtnQkFDTCxNQUFNO2FBQ1A7U0FDRjtRQUNELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ25DLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUNkLENBQU0sRUFDTixDQUE0QztRQUU1QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVE7UUFDdEIsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUNiLEdBQUcsRUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1osQ0FBQyxJQUFJLEdBQUcsQ0FBQzthQUNWO1lBQ0QsT0FBTyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pFLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxDQUFTO1FBQ3hCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQWdCLEVBQUUsTUFBYyxFQUFFLFdBQW1CO1FBQzlELE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2xGLENBQUM7SUFFRCxRQUFRLENBQUMsUUFBZ0IsRUFBRSxRQUFnQjtRQUN6QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCO1FBQ3hFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFM0MsTUFBTSxNQUFNLEdBQ1YsSUFBSTtZQUNKLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDWCxHQUFHO1lBQ0gsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNYLEdBQUc7WUFDSCxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ1gsR0FBRztZQUNILFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDWCxHQUFHO1lBQ0gsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNYLEtBQUssQ0FBQztRQUNSLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxVQUFlO1FBQ3BDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsb0JBQW9CLENBQUMsTUFBYztRQUNqQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUF5QjtRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakYsTUFBTSxPQUFPLEdBQUc7WUFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUM7WUFDMUIsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7U0FDcEIsQ0FBQztRQUNGLDBCQUEwQjtRQUMxQix1QkFBdUI7UUFDdkIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFjO1FBQ3JCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUViLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyx1Q0FBdUM7WUFDdkMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakMsdUNBQXVDO1lBQ3ZDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELDBCQUEwQixDQUFDLGtCQUErQixFQUFFLElBQWlCO1FBQzNFLFFBQVEsSUFBSSxFQUFFO1lBQ1osOEZBQThGO1lBQzlGLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN2QixLQUFLLFdBQVcsQ0FBQyxHQUFHO2dCQUNsQixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFvQixFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELGtCQUFrQixDQUFDLFVBQXVCLEVBQUUsSUFBaUI7UUFDM0QsUUFBUSxJQUFJLEVBQUU7WUFDWiw4RkFBOEY7WUFDOUYsS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3ZCLEtBQUssV0FBVyxDQUFDLEdBQUc7Z0JBQ2xCLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzNEO2dCQUNFLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FDdEIsQ0FDRSxLQUlDLEVBQ0QsU0FBb0IsRUFDcEIsRUFBRTtvQkFDRixJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUU7d0JBQ3JCLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTs0QkFDdEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7eUJBQy9COzZCQUFNOzRCQUNMLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3lCQUNoQztxQkFDRjt5QkFBTTt3QkFDTCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztxQkFDOUI7b0JBQ0QsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQyxFQUNEO29CQUNFLE1BQU0sRUFBRSxFQUFFO29CQUNWLFFBQVEsRUFBRSxFQUFFO29CQUNaLE9BQU8sRUFBRSxFQUFFO2lCQUNaLENBQ0YsQ0FBQztTQUNMO0lBQ0gsQ0FBQztJQUNELHVCQUF1QixDQUFDLGtCQUErQixFQUFFLElBQWlCO1FBQ3hFLFFBQVEsSUFBSSxFQUFFO1lBQ1osOEZBQThGO1lBQzlGLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN2QixLQUFLLFdBQVcsQ0FBQyxHQUFHO2dCQUNsQixPQUFPLGtCQUFrQixDQUFDO1NBQzdCO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQzlCLENBQUMsU0FBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FDcEUsQ0FBQztJQUNKLENBQUM7SUFFTyxRQUFRLENBQUMsU0FBMkIsRUFBRSxNQUFjO1FBQzFELElBQUksU0FBUyxZQUFZLElBQUksRUFBRTtZQUM3QixNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakQsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDekY7YUFBTTtZQUNMLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsU0FBb0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxXQUFXLENBQUMsU0FBb0I7UUFDOUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxlQUFlLENBQUMsU0FBb0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBWSxFQUFFLEtBQWE7UUFDaEMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQTJCLEVBQUUsVUFBdUI7UUFDMUQsUUFBUSxVQUFVLEVBQUU7WUFDbEIsS0FBSyxXQUFXLENBQUMsTUFBTTtnQkFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1lBQzlELEtBQUssV0FBVyxDQUFDLElBQUk7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztZQUM1RCw2QkFBNkI7WUFDN0Isa0VBQWtFO1lBQ2xFLEtBQUssV0FBVyxDQUFDLEtBQUs7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUseUJBQXlCLENBQUMsQ0FBQztZQUM3RCxLQUFLLFdBQVcsQ0FBQyxNQUFNO2dCQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLDJCQUEyQixDQUFDLENBQUM7WUFDL0QsS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3ZCLEtBQUssV0FBVyxDQUFDLEdBQUc7Z0JBQ2xCLE9BQU8sS0FBSyxDQUFDO1lBQ2Y7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQTJCLEVBQUUsVUFBdUI7UUFDM0QsUUFBUSxVQUFVLEVBQUU7WUFDbEIsS0FBSyxXQUFXLENBQUMsTUFBTTtnQkFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1lBQy9ELEtBQUssV0FBVyxDQUFDLElBQUk7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUseUJBQXlCLENBQUMsQ0FBQztZQUM3RCw2QkFBNkI7WUFDN0Isa0VBQWtFO1lBQ2xFLEtBQUssV0FBVyxDQUFDLEtBQUs7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztZQUM5RCxLQUFLLFdBQVcsQ0FBQyxNQUFNO2dCQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLDRCQUE0QixDQUFDLENBQUM7WUFDaEUsS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3ZCLEtBQUssV0FBVyxDQUFDLEdBQUc7Z0JBQ2xCLE9BQU8sS0FBSyxDQUFDO1lBQ2Y7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQW9CLEVBQUUsVUFBdUI7UUFDdEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDekQsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFpQjtRQUM5QixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssV0FBVyxDQUFDLE1BQU07Z0JBQ3JCLE9BQU8sTUFBTSxFQUFFO3FCQUNaLEdBQUcsQ0FBQyxDQUFDLDBCQUEwQixHQUFHLENBQUMsRUFBRSxPQUFPLENBQUM7cUJBQzdDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QyxLQUFLLFdBQVcsQ0FBQyxJQUFJO2dCQUNuQixPQUFPLE1BQU0sRUFBRTtxQkFDWixHQUFHLENBQUMsQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDO3FCQUMzQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUMsNkJBQTZCO1lBQzdCLGdHQUFnRztZQUNoRyxLQUFLLFdBQVcsQ0FBQyxLQUFLO2dCQUNwQixPQUFPLE1BQU0sRUFBRTtxQkFDWixHQUFHLENBQUMsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDO3FCQUM1QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUMsS0FBSyxXQUFXLENBQUMsTUFBTTtnQkFDckIsT0FBTyxNQUFNLEVBQUU7cUJBQ1osR0FBRyxDQUFDLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQztxQkFDOUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQWlCO1FBQ2xDLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxXQUFXLENBQUMsTUFBTTtnQkFDckIsT0FBTyxNQUFNLEVBQUU7cUJBQ1osR0FBRyxDQUFDLENBQUMsMEJBQTBCLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQztxQkFDOUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLEtBQUssV0FBVyxDQUFDLElBQUk7Z0JBQ25CLE9BQU8sTUFBTSxFQUFFO3FCQUNaLEdBQUcsQ0FBQyxDQUFDLHdCQUF3QixHQUFHLEVBQUUsRUFBRSxPQUFPLENBQUM7cUJBQzVDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1Qyw2QkFBNkI7WUFDN0IsaUdBQWlHO1lBQ2pHLEtBQUssV0FBVyxDQUFDLEtBQUs7Z0JBQ3BCLE9BQU8sTUFBTSxFQUFFO3FCQUNaLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QixHQUFHLEVBQUUsRUFBRSxPQUFPLENBQUM7cUJBQzdDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QyxLQUFLLFdBQVcsQ0FBQyxNQUFNO2dCQUNyQixPQUFPLE1BQU0sRUFBRTtxQkFDWixHQUFHLENBQUMsQ0FBQywyQkFBMkIsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDO3FCQUMvQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUMsS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3ZCLEtBQUssV0FBVyxDQUFDLEdBQUc7Z0JBQ2xCLDBDQUEwQztnQkFDMUMsT0FBTyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzVFO1FBQ0QsT0FBTyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBWSxFQUFFLFFBQTZDLEVBQUUsR0FBUTtRQUM3RSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsYUFBYSxDQUFtQyxLQUFVLEVBQUUsS0FBYTtRQUN2RSxPQUFPLEtBQUs7YUFDVCxNQUFNLENBQUMsQ0FBQyxJQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDM0IsTUFBTSxDQUFDLENBQUMsT0FBNkIsRUFBRSxVQUFhLEVBQUUsRUFBRTtZQUN2RCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ25DLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDekM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBd0IsRUFBRSxNQUFnQixFQUFFLEtBQVU7UUFDckUsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLEdBQUcsR0FBRyxFQUFFLENBQUM7U0FDVjtRQUNELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QjthQUFNO1lBQ0wsTUFBTSxLQUFLLEdBQVcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDeEU7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxrQkFBa0IsQ0FDaEIsS0FBVSxFQUNWLE1BQTZCO1FBRTdCLE9BQU8sS0FBSzthQUNULE1BQU0sQ0FBQyxDQUFDLElBQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUMzQixNQUFNLENBQUMsQ0FBQyxPQUErQixFQUFFLFVBQWEsRUFBRSxFQUFFO1lBQ3pELE1BQU0sV0FBVyxHQUFhLE1BQU0sQ0FBQyxNQUFNLENBQ3pDLENBQUMsS0FBZSxFQUFFLEtBQTRCLEVBQVksRUFBRTtnQkFDMUQsSUFBSSxVQUFVLEdBQVcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7b0JBQzNDLENBQUMsQ0FBQyxLQUFLO3lCQUNGLEdBQUcsQ0FBQyxDQUFDLEdBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsR0FBYSxDQUFDLENBQUM7eUJBQ3RFLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ2QsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLEtBQWUsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLFVBQVUsS0FBSyxXQUFXLEVBQUU7b0JBQzlCLFVBQVUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO2lCQUNwQztnQkFDSCxJQUFJLEtBQUssSUFBSSxVQUFVLEVBQUU7b0JBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxFQUNELEVBQUUsQ0FDSCxDQUFDO1lBQ0YsSUFBSSxVQUFVLElBQUksV0FBVyxFQUFFO2dCQUM3QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ2hFO1FBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFnQjtRQUMzQixPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDM0IsQ0FBQztJQUVELGVBQWUsQ0FBSSxHQUFXLEVBQUUsTUFBeUI7UUFDdkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUN4RSxDQUFDLE9BQTRCLEVBQUUsTUFBYyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM5QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN4QjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxFQUNELEdBQUcsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQixDQUF3QyxLQUFRO1FBQ2hFLE9BQU8sQ0FBQyxHQUFtQixFQUFLLEVBQUU7WUFDaEMsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBSSxLQUFRO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDL0IsT0FBTyxDQUNILEtBQXVDO2lCQUN0QyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQztpQkFDRCxNQUFNLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDckIsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2pCLENBQUMsQ0FBa0IsSUFBSSxJQUFJLENBQzlCLENBQUM7U0FDSDthQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQ3BDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFRLEVBQUUsR0FBVyxFQUFFLEVBQUU7Z0JBQ3pELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtvQkFDbEIsTUFBTSxLQUFLLEdBQUksS0FBNkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDckMsSUFDRSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDO3dCQUN4RCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDeEM7d0JBQ0MsS0FBNkIsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7cUJBQzVDO2lCQUNGO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxFQUFFLEVBQU8sQ0FBQyxDQUFDO1NBQ2I7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQXVCLEVBQUUsTUFBZTtRQUN0RCxJQUFJLFVBQVUsRUFBRTtZQUNkLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FDdEIsQ0FBQyxhQUFzQyxFQUFFLFlBQXVCLEVBQUUsR0FBVyxFQUFFLEVBQUU7Z0JBQy9FLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ2QsQ0FBQyxDQUFDO3dCQUNFOzRCQUNFLEVBQUUsRUFBRSxZQUFZLENBQUMsRUFBRTs0QkFDbkIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLOzRCQUN6QixTQUFTLEVBQUUsTUFBTSxLQUFLLFlBQVksQ0FBQyxFQUFFO3lCQUN0QztxQkFDRjtvQkFDSCxDQUFDLENBQUM7d0JBQ0UsR0FBRyxhQUFhO3dCQUNoQjs0QkFDRSxFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUU7NEJBQ25CLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSzs0QkFDekIsU0FBUyxFQUFFLE1BQU0sS0FBSyxZQUFZLENBQUMsRUFBRTt5QkFDdEM7cUJBQ0YsQ0FBQztZQUNSLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxtQkFBbUIsQ0FBQyxLQUFVLEVBQUUsS0FBSyxHQUFHLEtBQUs7UUFDM0MsTUFBTSxjQUFjLHFCQUFRLEtBQUssQ0FBRSxDQUFDO1FBQ3BDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3pELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDMUIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN6RDtTQUNGO1FBQ0QsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7WUFDbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELFNBQVMsQ0FBSSxRQUFXLEVBQUUsTUFBYztRQUN0QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ25ELENBQUMsWUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBbUIsRUFBSyxFQUFFO1lBQ3JELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQ2hDLFFBQVEsQ0FBQyxHQUFjLENBQUMsRUFDeEIsS0FBSyxFQUNMLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQ3RDLENBQUM7WUFFRixJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQ3JCLFlBQVksQ0FBQyxHQUFjLENBQUMsR0FBRyxRQUFRLENBQUM7YUFDekM7WUFDRCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDLEVBQ0QsRUFBTyxDQUNSLENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQVUsRUFBRSxNQUFjLEVBQUUsVUFBbUI7UUFDbEUsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ25CLEtBQUssU0FBUztnQkFDWixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdkMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzNELEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsS0FBSSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsSUFBSSxDQUFBLEVBQUU7b0JBQzlFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ3ZEO2dCQUNELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzdDLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDakUsS0FBSyxRQUFRO2dCQUNYLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN4RSxLQUFLLE9BQU87Z0JBQ1YsT0FBTyxLQUFLLENBQUMsQ0FBQywrQkFBK0I7WUFDL0MsZUFBZTtZQUNmLG9CQUFvQjtZQUNwQixzQkFBc0I7WUFDdEIsNkRBQTZEO1lBQzdELE1BQU07WUFDTixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLDJFQUEyRTtZQUMzRTtnQkFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixNQUFNLENBQUMsSUFBSSw4QkFBOEIsQ0FBQyxDQUFDO2dCQUNuRixPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsUUFBdUIsRUFBRSxLQUFhLEVBQUUsR0FBVztRQUNoRSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVsRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELHdCQUF3QixDQUFDLFNBQWlCO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6QixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0QsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFekQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUVyQixJQUFJLFFBQVEsR0FBRyxVQUFVLElBQUksQ0FBQyxRQUFRLEtBQUssVUFBVSxJQUFJLFVBQVUsR0FBRyxZQUFZLENBQUMsRUFBRTtZQUNuRixVQUFVLEdBQUcsRUFBRSxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUM7WUFDeEMsWUFBWSxHQUFHLEVBQUUsR0FBRyxZQUFZLEdBQUcsVUFBVSxDQUFDO1NBQy9DO2FBQU07WUFDTCxVQUFVLEdBQUcsUUFBUSxHQUFHLFVBQVUsQ0FBQztZQUNuQyxZQUFZLEdBQUcsVUFBVSxHQUFHLFlBQVksQ0FBQztTQUMxQztRQUVELCtDQUErQztRQUMvQyxVQUFVLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUVoQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBZSxFQUFFLEtBQWE7UUFDcEMsT0FBTyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUN0RCxDQUFDO0lBRUQsU0FBUyxDQUFDLFVBQXVCO1FBQy9CLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQW9CLEVBQTBCLEVBQUU7WUFDckUsT0FBTztnQkFDTCxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBQ2hCLGFBQWEsRUFBRSxTQUFTLENBQUMsT0FBTztvQkFDOUIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLO29CQUNyQixDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVE7d0JBQ3BCLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTTt3QkFDdEIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLO2FBQ3hCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFlLEVBQUUsRUFBVyxFQUFFLENBQVU7UUFDeEQsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFFcEIsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3hCLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFO1lBQ3BCLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQ25CLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsZUFBZSxDQUFJLFFBQVcsRUFBRSxZQUF3QixFQUFFLFlBQTBCO1FBQ2xGLE1BQU0sUUFBUSxHQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5RCxPQUFPLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQVUsRUFBRSxJQUFhLEVBQUUsRUFBRTtZQUMvRCxNQUFNLEtBQUssR0FBSSxPQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsT0FBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztnQkFDN0IsQ0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDVixDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUTtvQkFDM0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0JBQ2YsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNWLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsYUFBYTtJQUNiLDhCQUE4QjtJQUM5Qiw2REFBNkQ7SUFDN0QsbUVBQW1FO0lBQ25FLFNBQVM7SUFDVCxPQUFPO0lBQ1AsSUFBSTtJQUVKLGtGQUFrRjtJQUNsRiw0QkFBNEI7SUFDNUIsMEZBQTBGO0lBQzFGLHNDQUFzQztJQUN0QywyQkFBMkI7SUFDM0IsT0FBTztJQUNQLElBQUk7SUFFSiw0QkFBNEI7SUFDNUIsaUJBQWlCO0lBQ2pCLGtEQUFrRDtJQUNsRCxvRUFBb0U7SUFDcEUsU0FBUztJQUNULHVCQUF1QjtJQUN2QixNQUFNO0lBQ04sZ0dBQWdHO0lBQ2hHLElBQUk7SUFFSixhQUFhO0lBQ2IsMkNBQTJDO0lBQzNDLGlCQUFpQjtJQUNqQix1QkFBdUI7SUFDdkIsb0RBQW9EO0lBQ3BELFNBQVM7SUFDVCxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QixvREFBb0Q7SUFDcEQsU0FBUztJQUNULE9BQU87SUFDUCxxQkFBcUI7SUFDckIsZUFBZTtJQUNmLG9EQUFvRDtJQUNwRCxzREFBc0Q7SUFDdEQsYUFBYTtJQUNiLDRDQUE0QztJQUM1QywrQkFBK0I7SUFDL0IsdUZBQXVGO0lBQ3ZGLG1FQUFtRTtJQUNuRSxlQUFlO0lBQ2YsZ0NBQWdDO0lBQ2hDLHdGQUF3RjtJQUN4RixtRUFBbUU7SUFDbkUsWUFBWTtJQUNaLE9BQU87SUFDUCxJQUFJO0lBRUosc0ZBQXNGO0lBQ3RGLGFBQWE7SUFDYiwrQ0FBK0M7SUFDL0Msd0JBQXdCO0lBQ3hCLDRGQUE0RjtJQUM1RixpQ0FBaUM7SUFDakMsZ0NBQWdDO0lBQ2hDLGdDQUFnQztJQUNoQyxpQ0FBaUM7SUFDakMsb0JBQW9CO0lBQ3BCLGFBQWE7SUFDYixZQUFZO0lBQ1osT0FBTztJQUNQLElBQUk7SUFFSixXQUFXLENBQUMsUUFBc0IsRUFBRSxFQUFVO1FBQzVDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFnQixFQUFFLFFBQW1CLEVBQVcsRUFBRTtZQUN2RixPQUFPLENBQ0wsT0FBTztnQkFDUCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBaUIsRUFBVyxFQUFFO29CQUMzQyxPQUFPLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUM1QixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxFQUFFLElBQWUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxPQUFPLENBQ0wsUUFBNkMsRUFDN0MsTUFBZ0U7UUFFaEUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzVELENBQUM7SUFFRCxpQkFBaUIsQ0FBSSxhQUFxQixFQUFFLFNBQWtCLEVBQUUsS0FBVTtRQUN4RSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLENBQUMsS0FBWSxFQUFFLElBQVksRUFBRSxtQkFBNEIsSUFBSTtRQUN2RSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1FBQzFELElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVsQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFO1lBQzNCLE9BQU8sU0FBUyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7Z0JBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUMxQztZQUVELG9CQUFvQjtZQUNwQixJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ3hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDMUI7U0FDRjthQUFNO1lBQ0wsUUFBUSxHQUFHLFNBQVMsQ0FBQztTQUN0QjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFHRCxpQkFBaUIsQ0FBQyxXQUFtQixFQUFFLFdBQW1CO1FBQ3hELE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUdELGFBQWEsQ0FBQyxJQUFZLEVBQUUsR0FBVztRQUNyQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pGLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUdELGFBQWEsQ0FBQyxNQUF1QixFQUFFLFNBQThCLEVBQUUsV0FBVyxHQUFHLEtBQUs7UUFDeEYsTUFBTSxPQUFPLEdBQ1gsU0FBUyxLQUFLLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUM5RixNQUFNLEtBQUssR0FBRyxXQUFXO1lBQ3ZCLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWM7WUFDMUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ1osQ0FBQyxPQUF1QixFQUFFLElBQW1CLEVBQUUsRUFBRTs7Z0JBQy9DLE9BQU8sQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQ2hELENBQUEsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxZQUFZLEtBQUksRUFBRSxDQUN4QyxDQUFDO2dCQUNGLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLE1BQU0sS0FBSSxFQUFFLENBQUMsQ0FBQztnQkFDMUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLGNBQWMsMENBQUUsTUFBTSxLQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRSxPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxPQUFPLEtBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzdFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLEtBQUssS0FBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkUsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxFQUNEO2dCQUNFLFlBQVksRUFBRSxFQUFFO2dCQUNoQixNQUFNLEVBQUUsRUFBRTtnQkFDVixNQUFNLEVBQUUsRUFBRTtnQkFDVixPQUFPLEVBQUUsRUFBRTtnQkFDWCxLQUFLLEVBQUUsRUFBRTthQUNWLENBQ0YsQ0FBQztRQUNOLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsdUJBQXVCLENBQUMsV0FBeUIsRUFBRSxLQUFhO1FBQzlELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0UsT0FBTztZQUNMLHFCQUFxQjtZQUNyQiwwREFBMEQ7WUFDMUQsaUJBQWlCO1lBQ2pCLG9CQUFvQjtZQUNwQixjQUFjO1lBQ2QsbUJBQW1CO1NBQ3BCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsMEJBQTBCLENBQUMsV0FBeUIsRUFBRSxlQUF1QjtRQUMzRSxNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7UUFFakMsOENBQThDO1FBQzlDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxJQUFJLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLFVBQVUsRUFBRSxFQUFFO2dCQUNkLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFdBQVcsRUFBRSxFQUFFO2dCQUNmLFdBQVcsRUFBRSxFQUFFO2dCQUNmLE9BQU8sRUFBRSxFQUFFO2FBQ1osQ0FBQztZQUNGLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixNQUFNLEVBQUUsRUFBRTtnQkFDVixJQUFJLEVBQUUsRUFBRTtnQkFDUixZQUFZLEVBQUUsRUFBRTtnQkFDaEIsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxFQUFFLEVBQUU7YUFDWixDQUFDO1lBQ0YsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUM7WUFDeEMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDcEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FDakYsVUFBVSxDQUFDO1lBQ2IsbUVBQW1FO1lBQ25FLFFBQVEsSUFBSSxFQUFFO2dCQUNaLEtBQUssV0FBVyxDQUFDLE1BQU07b0JBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsZUFBZSxDQUFDO29CQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsT0FBTyxHQUFHLG9CQUFvQixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRzt3QkFDakIsV0FBVyxNQUFNLENBQUMsSUFBSSxLQUFLO3dCQUMzQixXQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLO3dCQUNqRSxXQUFXLE1BQU0sS0FBSzt3QkFDdEIsYUFBYSxRQUFRLEtBQUs7d0JBQzFCLGdCQUFnQiwwQkFBMEIsRUFBRTtxQkFDN0MsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ1gsTUFBTTtnQkFDUixLQUFLLFdBQVcsQ0FBQyxHQUFHO29CQUNsQixNQUFNLFVBQVUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQzFGLE1BQU0sU0FBUyxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDckYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBRTlDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFDMUUsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7b0JBQ3pGLElBQUksQ0FBQyxPQUFPLEdBQUcsdUJBQXVCLFVBQVUsT0FBTyxTQUFTLEVBQUUsQ0FBQztvQkFDbkUsSUFBSSxDQUFDLFdBQVcsR0FBRzt3QkFDakIsaUJBQWlCLFVBQVUsS0FBSzt3QkFDaEMsU0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSzt3QkFDN0QsZ0JBQWdCLDBCQUEwQixFQUFFO3FCQUM3QyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDWCxNQUFNO2dCQUNSLEtBQUssV0FBVyxDQUFDLEdBQUc7b0JBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxjQUFjLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGVBQWUsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxzQkFBc0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLE9BQU8sTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDMUcsSUFBSSxDQUFDLFdBQVcsR0FBRzt3QkFDakIsaUJBQWlCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxLQUFLO3dCQUNuRCxTQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLO3dCQUM5RCxrQkFBa0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEtBQUs7d0JBQ3JELGdCQUFnQiwwQkFBMEIsRUFBRTtxQkFDN0MsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ1gsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO3dCQUNqRCxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDckQsTUFBTTtnQkFDUixLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZCLHlCQUF5QjtnQkFDekIsS0FBSyxXQUFXLENBQUMsU0FBUyxDQUFDO2dCQUMzQix5QkFBeUI7Z0JBQ3pCLEtBQUssV0FBVyxDQUFDLE1BQU0sQ0FBQztnQkFDeEIsS0FBSyxXQUFXLENBQUMsUUFBUTtvQkFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3JGLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUNoQixNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUMzRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyx5QkFBeUIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLE9BQzdFLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxlQUFlLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLGtCQUM3RCxFQUFFLENBQUM7b0JBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRzt3QkFDakIsU0FBUyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsS0FBSzt3QkFDckQsV0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSzt3QkFDdEYsT0FDRSxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUM1RCxLQUFLO3dCQUNMLFdBQVcsTUFBTSxDQUNmLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQzNFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLO3dCQUN6QixnQkFBZ0IsMEJBQTBCLEVBQUU7cUJBQzdDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUVYLElBQUksTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUU7d0JBQ2pDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEMsVUFBVSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNwRCxVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxDQUMzRSxVQUFVLENBQ1gsQ0FBQzt3QkFDRixVQUFVLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FDdEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FDekUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ3JCLFVBQVUsQ0FBQyxPQUFPLEdBQUcseUJBQ25CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFDM0IsT0FBTyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO3dCQUNyRixVQUFVLENBQUMsV0FBVyxHQUFHOzRCQUN2QixTQUFTLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxLQUFLOzRCQUNwRCxXQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLOzRCQUNyRixPQUNFLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsa0JBQzFELEtBQUs7NEJBQ0wsV0FBVyxNQUFNLENBQ2YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FDekUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUs7NEJBQ3pCLGdCQUFnQiwwQkFBMEIsRUFBRTt5QkFDN0MsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ1o7b0JBQ0QsTUFBTTtnQkFDUixLQUFLLFdBQVcsQ0FBQyxLQUFLO29CQUNwQixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNoRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDO29CQUMvQixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMvRCxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDO29CQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsc0NBQXNDO29CQUN6RSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsb0JBQW9CLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRzt3QkFDakIsVUFBVSxNQUFNLENBQUMsU0FBUyxLQUFLO3dCQUMvQixZQUFZLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLO3dCQUMvRCxjQUFjLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLO3dCQUMvRCxnQkFBZ0IsVUFBVSxFQUFFO3FCQUM3QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDWCxNQUFNO2dCQUNSLEtBQUssV0FBVyxDQUFDLGlCQUFpQjtvQkFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsYUFBYSxDQUFDLGVBQWUsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDO29CQUM5RCxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDO29CQUN2RCxJQUFJLENBQUMsT0FBTyxHQUFHLHdCQUF3QixNQUFNLENBQUMsYUFBYSxDQUFDLG9CQUFvQixPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDakksSUFBSSxDQUFDLFdBQVcsR0FBRzt3QkFDakIsUUFBUSxNQUFNLENBQUMsYUFBYSxDQUFDLG9CQUFvQixLQUFLO3dCQUN0RCxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEtBQUs7d0JBQ2xELGFBQWEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUs7d0JBQ25GLFdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLO3dCQUMvRSxnQkFBZ0IsMEJBQTBCLEVBQUU7cUJBQzdDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNYLE1BQU07Z0JBQ1IsS0FBSyxXQUFXLENBQUMsT0FBTztvQkFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGVBQWUsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsY0FBYyxDQUFDO29CQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLHFCQUFxQixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2xELElBQUksQ0FBQyxXQUFXLEdBQUc7d0JBQ2pCLG9CQUFvQixNQUFNLENBQUMsSUFBSSxLQUFLO3dCQUNwQyxnQkFBZ0IsMEJBQTBCLEVBQUU7cUJBQzdDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNYLE1BQU07Z0JBQ1IsS0FBSyxXQUFXLENBQUMsSUFBSTtvQkFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsYUFBYSxDQUFDLGVBQWUsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDO29CQUM5RCxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDO29CQUN2RCxJQUFJLENBQUMsT0FBTyxHQUFHLHdCQUF3QixNQUFNLENBQUMsYUFBYSxDQUFDLG9CQUFvQixPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDakksSUFBSSxDQUFDLFdBQVcsR0FBRzt3QkFDakIsUUFBUSxNQUFNLENBQUMsYUFBYSxDQUFDLG9CQUFvQixLQUFLO3dCQUN0RCxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEtBQUs7d0JBQ2xELGFBQWEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUs7d0JBQ25GLFdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLO3dCQUMvRSxnQkFBZ0IsMEJBQTBCLEVBQUU7cUJBQzdDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUVYLElBQUksTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFlBQVksRUFBRTt3QkFDeEIsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUNwQyxVQUFVLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ3BELFVBQVUsQ0FBQyxNQUFNLEdBQUcsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQzt3QkFDM0QsVUFBVSxDQUFDLElBQUksR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsWUFBWSxDQUFDLGVBQWUsQ0FBQzt3QkFDdkQsVUFBVSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDO3dCQUNuRSxVQUFVLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO3dCQUM1RCxVQUFVLENBQUMsT0FBTyxHQUFHLHdCQUF3QixNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzt3QkFDckksVUFBVSxDQUFDLFdBQVcsR0FBRzs0QkFDdkIsUUFBUSxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixLQUFLOzRCQUNyRCxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEtBQUs7NEJBQ2pELGFBQWEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUs7NEJBQ2xGLFdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLOzRCQUM5RSxnQkFBZ0IsVUFBVSxFQUFFO3lCQUM3QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDWjtvQkFDRCxNQUFNO2FBQ1Q7WUFDRCxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hCLGVBQWUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO2FBQ3pDO1lBQ0QsV0FBVyxDQUFDLElBQUksQ0FDZDtnQkFDRSxrQkFBa0I7Z0JBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqRixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDM0UsZ0ZBQWdGO2dCQUNoRixJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZO29CQUNsQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsVUFBVSxPQUFPLElBQUksQ0FBQyxZQUFZLE9BQU87b0JBQzdELENBQUMsQ0FBQyxFQUFFO2dCQUNOLG1CQUFtQjtnQkFDbkIsZ0JBQWdCO2dCQUNoQixPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksS0FBSyxHQUFHLGVBQWUsSUFBSSxJQUFJLENBQUMsUUFBUSxtQkFBbUI7Z0JBQ3RGLFdBQVcsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU07Z0JBQ25ELGVBQWUsSUFBSSxDQUFDLFdBQVcsTUFBTTtnQkFDckMsV0FBVyxJQUFJLENBQUMsT0FBTyxNQUFNO2dCQUM3QixnQkFBZ0I7YUFDakIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQ1gsQ0FBQztZQUVGLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtnQkFDckIsV0FBVyxDQUFDLElBQUksQ0FDZDtvQkFDRSxrQkFBa0I7b0JBQ2xCLFVBQVUsQ0FBQyxNQUFNO3dCQUNmLENBQUMsQ0FBQyxXQUFXLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU07d0JBQ3RFLENBQUMsQ0FBQyxFQUFFO29CQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN2RixnRkFBZ0Y7b0JBQ2hGLFVBQVUsQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLFlBQVk7d0JBQzlDLENBQUMsQ0FBQyxhQUFhLFVBQVUsQ0FBQyxVQUFVLE9BQU8sVUFBVSxDQUFDLFlBQVksT0FBTzt3QkFDekUsQ0FBQyxDQUFDLEVBQUU7b0JBQ04sbUJBQW1CO29CQUNuQixnQkFBZ0I7b0JBQ2hCLE9BQU8sVUFBVSxDQUFDLFdBQVcsSUFBSSxLQUFLLE1BQU0sVUFBVSxDQUFDLFFBQVEsbUJBQW1CO29CQUNsRixXQUFXLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNO29CQUNuRCxlQUFlLFVBQVUsQ0FBQyxXQUFXLE1BQU07b0JBQzNDLFdBQVcsVUFBVSxDQUFDLE9BQU8sTUFBTTtvQkFDbkMsZ0JBQWdCO2lCQUNqQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDWCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsUUFBZ0IsRUFBRSxJQUFZO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsZ0NBQWdDLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRixPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6QyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDL0IsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHFCQUFxQixDQUFDLFNBQWlCLEVBQUUsT0FBZ0IsS0FBSztRQUM1RCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWpELElBQUksSUFBSSxFQUFFO1lBQ1IsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlCO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELG1CQUFtQixDQUNqQixRQUEyQixFQUMzQixjQUE2QixFQUM3QixHQUFTO1FBRVQsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUNwQixDQUFDLE9BQXNCLEVBQUUsT0FBc0MsRUFBaUIsRUFBRTs7WUFDaEYsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSTtnQkFDbkQsT0FBTyxFQUFFLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLE9BQU8sR0FBRyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyRixRQUFRLEVBQUUsS0FBSztnQkFDZixLQUFLLEVBQUUsUUFBUSxHQUFHLENBQUM7YUFDcEIsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxXQUFXO2dCQUN4QyxDQUFDLENBQUMsY0FBYyxDQUFDLFdBQVc7Z0JBQzVCLENBQUMsQ0FBQyxDQUFBLE1BQUEsT0FBTyxDQUFDLGtCQUFrQiwwQ0FBRSxNQUFNO29CQUNwQyxDQUFDLENBQUMsY0FBYyxDQUFDLGlCQUFpQjtvQkFDbEMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7WUFDN0IsSUFBSSxjQUFjLEtBQUssYUFBYSxFQUFFO2dCQUNwQyxPQUFPLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUk7b0JBQzdFLE9BQU8sRUFBRSxjQUFjO29CQUN2QixRQUFRLEVBQUUsS0FBSztvQkFDZixLQUFLLEVBQUUsY0FBYztpQkFDdEIsQ0FBQzthQUNIO1lBQ0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0UsTUFBTSxVQUFVLEdBQUcsT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDM0QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJO2dCQUNqRSxPQUFPLEVBQ0wsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BGLFFBQVEsRUFBRSxLQUFLO2dCQUNmLEtBQUssRUFBRSxVQUFVLEdBQUcsQ0FBQzthQUN0QixDQUFDO1lBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQXFCLEVBQVEsRUFBRTtnQkFDeEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUk7b0JBQ3pFLE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVTtvQkFDMUIsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVO2lCQUN6QixDQUFDO2dCQUNGLDZGQUE2RjtnQkFDN0YsMENBQTBDO2dCQUMxQyxxQkFBcUI7Z0JBQ3JCLG1DQUFtQztnQkFDbkMsS0FBSztnQkFDTCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtvQkFDdEMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQ2hFLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUN0QixJQUFJO3dCQUNILE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUs7d0JBQ3RGLFFBQVEsRUFBRSxLQUFLO3dCQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUs7cUJBQzdCLENBQUM7aUJBQ0g7WUFDSCxDQUFDLENBQUM7WUFFRixNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQXFCLEVBQVEsRUFBRTtnQkFDakQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJO29CQUN2RixPQUFPLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtvQkFDcEMsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsS0FBSyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7aUJBQy9CLENBQUM7WUFDSixDQUFDLENBQUM7WUFFRixJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO2dCQUNuRSxNQUFNLHVCQUF1QixHQUFvQixPQUFPLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FDN0UsY0FBYyxDQUFDLEVBQUU7b0JBQ2YsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTt3QkFDakQsT0FBTyxhQUFhLENBQUMsZ0JBQWdCLEtBQUssY0FBYyxDQUFDLGdCQUFnQixDQUFDO29CQUM1RSxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQ0YsQ0FBQztnQkFDRix1QkFBdUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDN0M7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDN0M7WUFFRCxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sWUFBWSxHQUFhLE1BQUEsT0FBTyxDQUFDLGdCQUFnQiwwQ0FDbkQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsSUFBSSxNQUFLLFNBQVMsRUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLEdBQUcsQ0FBYSxDQUFDO1lBQ2hDLE1BQU0sT0FBTyxHQUFXLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVFLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDckQsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsT0FBTyxFQUFFLEdBQUcsT0FBTyxPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNsRCxLQUFLLEVBQUUsT0FBTzthQUNmLENBQUM7WUFDRixNQUFNLGFBQWEsR0FBRyxDQUNwQixPQUF3QixFQUN4QixlQUF3QyxFQUN4QyxlQUFvQyxFQUNwQyxtQkFBd0MsRUFDeEMsS0FBYSxFQUNQLEVBQUU7Z0JBQ1IsTUFBTSxJQUFJLEdBQ1IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzFFLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtvQkFDdEIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSTt3QkFDakUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlLENBQUM7d0JBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsbUJBQW1CLENBQUM7d0JBQzVDLFFBQVEsRUFBRSxLQUFLO3FCQUNoQixDQUFDO2lCQUNIO1lBQ0gsQ0FBQyxDQUFDO1lBRUYsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNuRSxhQUFhLENBQ1gsT0FBTyxDQUFDLGVBQWUsRUFDdkIsTUFBTSxFQUNOLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsS0FBSyxDQUNOLENBQUM7YUFDSDtZQUVELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZFLGFBQWEsQ0FDWCxPQUFPLENBQUMsZUFBZSxFQUN2QixNQUFNLEVBQ04sb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4QixLQUFLLENBQ04sQ0FBQzthQUNIO1lBRUQsYUFBYSxDQUNYLE9BQU8sQ0FBQyxlQUFlLEVBQ3ZCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLENBQUMsQ0FDRixDQUFDO1lBQ0YsYUFBYSxDQUNYLE9BQU8sQ0FBQyxlQUFlLEVBQ3ZCLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDbkMsQ0FBQztZQUVGLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRztnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBRXBGLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRztnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBRXBGLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRztnQkFDbEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLHFCQUFxQjtvQkFDbEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRztvQkFDdEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztZQUVwQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUc7Z0JBQ2xCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUI7b0JBQ2xELENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUc7b0JBQ3RCLENBQUMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUM7WUFFcEMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNO2dCQUMvQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO2dCQUNsRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRU4sT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHO2dCQUN2QixPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDbEYsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHO2dCQUN2QixPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFFbEYsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNO2dCQUNoRCxDQUFDLENBQUMsTUFBTSxDQUNKLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQzdFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztnQkFDZixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRU4sT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHO2dCQUNyQixPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDaEYsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHO2dCQUNyQixPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFFaEYsSUFBSSxPQUFPLENBQUMsY0FBYyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDL0QsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHO29CQUN4QixPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsb0JBQW9CO3dCQUN2RCxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHO3dCQUM1QixDQUFDLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2dCQUVuQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUc7b0JBQ3hCLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0I7d0JBQ3ZELENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUc7d0JBQzVCLENBQUMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7Z0JBRW5DLE1BQU0sZ0JBQWdCLEdBQ3BCLE9BQU8sSUFBSSxPQUFPLENBQUMsY0FBYyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO29CQUNqRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRVQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEdBQUc7b0JBQzdCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEdBQUcsZ0JBQWdCO3dCQUNoRCxDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEdBQUc7d0JBQ2pDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDdkIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEdBQUc7b0JBQzdCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEdBQUcsZ0JBQWdCO3dCQUNoRCxDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEdBQUc7d0JBQ2pDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFFdkIsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE1BQU07b0JBQ3RELENBQUMsQ0FBQyxNQUFNLENBQ0osT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FDN0UsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO29CQUNmLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRU4sT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUc7b0JBQzNCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsaUJBQWlCO3dCQUMvQyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUc7d0JBQy9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDeEIsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUc7b0JBQzNCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsaUJBQWlCO3dCQUMvQyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUc7d0JBQy9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFFeEIsQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUUxRCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2xFLGFBQWEsQ0FDWCxPQUFPLENBQUMsY0FBYyxFQUN0QixNQUFNLEVBQ04sZUFBZSxFQUNmLG1CQUFtQixFQUNuQixLQUFLLENBQ04sQ0FBQztpQkFDSDtnQkFFRCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUN0RSxhQUFhLENBQ1gsT0FBTyxDQUFDLGNBQWMsRUFDdEIsTUFBTSxFQUNOLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsS0FBSyxDQUNOLENBQUM7aUJBQ0g7Z0JBRUQsYUFBYSxDQUNYLE9BQU8sQ0FBQyxjQUFjLEVBQ3RCLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLENBQUMsQ0FDRixDQUFDO2dCQUNGLGFBQWEsQ0FDWCxPQUFPLENBQUMsY0FBYyxFQUN0QixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4QixPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ2xDLENBQUM7YUFDSDtZQUVELHNIQUFzSDtZQUN0SCxrRkFBa0Y7WUFDbEYsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO29CQUM5QixJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUU7d0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3dCQUVsQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7NkJBQzNDLE1BQU0sQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzs2QkFDMUMsTUFBTSxDQUFDLENBQUMsR0FBaUMsRUFBRSxHQUFHLEVBQUUsRUFBRTs0QkFDakQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzdCLE9BQU8sR0FBRyxDQUFDO3dCQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDVCxPQUFPLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztxQkFDN0I7aUJBQ0Y7YUFDRjtZQUVELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsRUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUMzQixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FDWCxLQUFpQyxFQUNqQyxRQUFnRDtRQUVoRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUNqQyxDQUFDLEtBQWlDLEVBQUUsT0FBNkIsRUFBRSxFQUFFO1lBQ25FLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxFQUNELEVBQWdDLENBQ2pDLENBQUM7SUFDSixDQUFDO0lBRUQsdUJBQXVCLENBQUMsR0FBVztRQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELHFDQUFxQyxDQUFDLEtBQTBCO1FBQzlELE1BQU0scUNBQXFDLEdBQ3pDO1lBQ0UsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRO1lBQ3pELENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNoRSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFlBQVk7WUFDakUsQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFlBQVk7WUFDeEUsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhO1lBQ25FLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhO1lBQzFFLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUI7WUFDM0UsQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLGlCQUFpQjtZQUNsRixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLGdCQUFnQixDQUFDLEtBQUs7WUFDbkQsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO1lBQzFELENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsY0FBYztZQUNyRSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLEVBQUUsZ0JBQWdCLENBQUMsY0FBYztTQUM3RSxDQUFDO1FBQ0osT0FBTyxxQ0FBcUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsNENBQTRDLENBQzFDLEtBQW1CLEVBQ25CLFNBQWtCO1FBRWxCLE1BQU0sS0FBSyxHQUE4QyxTQUFTO1lBQ2hFLENBQUMsQ0FBQztnQkFDRSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLHFCQUFxQjtnQkFDNUUsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxlQUFlO2dCQUN2RSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLHdCQUF3QjtnQkFDNUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyx3QkFBd0I7Z0JBQ3hFLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsWUFBWTtnQkFDakUsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLHdCQUF3QjtnQkFDbEYsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxtQkFBbUI7Z0JBQ3hFLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsb0JBQW9CO2dCQUMxRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLGVBQWU7Z0JBQ2hFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsWUFBWTthQUMzRDtZQUNILENBQUMsQ0FBQztnQkFDRSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLGNBQWM7Z0JBQ3JFLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsUUFBUTtnQkFDaEUsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxpQkFBaUI7Z0JBQ3JFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsaUJBQWlCO2dCQUNqRSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUs7Z0JBQzFELENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxpQkFBaUI7Z0JBQzNFLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsWUFBWTtnQkFDakUsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO2dCQUNuRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLFFBQVE7Z0JBQ3pELENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsS0FBSzthQUNwRCxDQUFDO1FBQ04sT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxvQkFBb0IsQ0FBQyxNQUFjLEVBQUUsZ0JBQXdCLENBQUMsQ0FBQztRQUM3RCxNQUFNLEtBQUssR0FBRyxNQUFNLEdBQUcsMEJBQTBCLENBQUM7UUFFbEQsSUFBSSxhQUFhLElBQUksQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUM3QztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQUMsT0FBZSxFQUFFLGdCQUF3QixDQUFDLENBQUM7UUFDL0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFFOUMsSUFBSSxhQUFhLElBQUksQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUM3QztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0JBQW9CLENBQUMsT0FBZSxFQUFFLGdCQUF3QixDQUFDLENBQUM7UUFDOUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUVsQyxJQUFJLGFBQWEsSUFBSSxDQUFDLEVBQUU7WUFDdEIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBd0IsRUFBRSxLQUFjO1FBQ3pELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQXlCLEVBQUUsSUFBVyxFQUFFLEVBQUU7WUFDN0QsSUFBSSxLQUFLLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksQ0FBQyxFQUFFO2dCQUM1QixLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTthQUMzQjtZQUVELElBQUksS0FBSyxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxXQUFXLENBQUMsRUFBRTtnQkFDNUIsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBc0IsQ0FBQztnQkFDaEQsS0FBSyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBNEIsQ0FBQzthQUM5RDtZQUVELElBQUksS0FBSyxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsRUFBRTtnQkFDN0IsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBdUIsQ0FBQztnQkFDbEQsS0FBSyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBNkIsQ0FBQzthQUNoRTtZQUVELElBQUksS0FBSyxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxnQkFBZ0IsQ0FBQyxFQUFFO2dCQUNqQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUEyQixDQUFDO2dCQUMxRCxLQUFLLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHVCQUFpQyxDQUFDO2FBQ3hFO1lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGVBQWUsQ0FBQyxFQUFFO2dCQUNoQyxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUEwQixDQUFDO2dCQUN4RCxLQUFLLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFnQyxDQUFDO2FBQ3RFO1lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLG1CQUFtQixDQUFDLEVBQUU7Z0JBQ3BDLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQTZCLENBQUM7YUFDaEU7WUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsa0JBQWtCLENBQUMsRUFBRTtnQkFDbkMsS0FBSyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDbkQsS0FBSyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQzthQUM1RDtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELEdBQUcsQ0FBSSxHQUFzQixFQUFFLElBQW9CO1FBQ2pELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FDbEIsRUFBRSxFQUNGLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQWMsRUFBcUIsRUFBRTtZQUMxRSxPQUFPO2dCQUNMLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUNuQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUksR0FBRyxJQUFTO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQVUsRUFBRSxJQUFPLEVBQUUsRUFBRTtZQUN6QyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBTSxDQUFDO1FBQ3JDLENBQUMsRUFBRSxFQUFPLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRCxvQkFBb0IsQ0FDbEIsR0FBTSxFQUNOLEVBQXVEO1FBRXZELE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ3BCLEdBQUcsQ0FBQyxNQUFXLEVBQUUsSUFBOEI7Z0JBQzdDLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO29CQUN0QyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDN0IsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRTs0QkFDekMsRUFBRSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQzs0QkFDeEIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7d0JBQ3hELENBQUM7cUJBQ0YsQ0FBQyxDQUFDO2lCQUNKO3FCQUFNO29CQUNMLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ2xDO1lBQ0gsQ0FBQztTQUNGLENBQWlCLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx5QkFBeUIsQ0FBQyxRQUF1QjtRQUMvQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFaEMsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO1lBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDNUI7YUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7WUFDckIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDN0I7YUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7WUFDckIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDN0I7YUFBTTtZQUNMLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzdCO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx1QkFBdUIsQ0FBQyxRQUF1QjtRQUM3QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFaEMsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO1lBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDN0I7YUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7WUFDckIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDN0I7YUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7WUFDckIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDN0I7YUFBTTtZQUNMLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxTQUFpQixFQUFFLElBQVk7UUFDeEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM5QyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsbUJBQW1CLENBQ2pCLElBQW1DLEVBQ25DLFdBQW1CLEVBQ25CLGlCQUE2Qzs7UUFFN0MsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzdFLE1BQU0sY0FBYyxHQUNsQixNQUFBLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsbUNBQ3RFLEVBQWtCLENBQUM7WUFFdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUMsZ0JBQWdCO2dCQUM5QyxDQUFDLENBQUMsY0FBYyxDQUFDLGdCQUFnQjtnQkFDakMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxlQUFlO29CQUNoQyxDQUFDLENBQUMsY0FBYyxDQUFDLGVBQWU7b0JBQ2hDLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWTt3QkFDN0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxZQUFZO3dCQUM3QixDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDdkI7YUFBTTtZQUNMLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQztTQUM1QjtJQUNILENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILDJCQUEyQixDQUN6QixJQUFtQyxFQUNuQyxXQUFtQixFQUNuQixpQkFBNkM7O1FBRTdDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM3RSxNQUFNLGNBQWMsR0FDbEIsTUFBQSxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG1DQUN0RSxFQUFrQixDQUFDO1lBRXRCLElBQUksQ0FBQyxpQkFBaUIsR0FBRztnQkFDdkIsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxjQUFjLENBQUMsdUJBQXVCLElBQUksRUFBRTtnQkFDL0UsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUUsY0FBYyxDQUFDLHNCQUFzQixJQUFJLEVBQUU7Z0JBQzdFLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFLGNBQWMsQ0FBQyxtQkFBbUIsSUFBSSxFQUFFO2dCQUN2RSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFDbEIsR0FBRyxjQUFjLENBQUMsdUJBQXVCLElBQUksRUFBRSxJQUM3QyxjQUFjLENBQUMsc0JBQXNCLElBQUksRUFDM0MsSUFBSSxjQUFjLENBQUMsbUJBQW1CLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDN0QsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTthQUMxQixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7U0FDL0I7YUFBTTtZQUNMLE9BQU87Z0JBQ0wsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFO2dCQUNwQyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO2dCQUN4QixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO2FBQzFCLENBQUM7U0FDSDtJQUNILENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILHFCQUFxQixDQUNuQixJQUFtQyxFQUNuQyxXQUFtQixFQUNuQixpQkFBNkM7O1FBRTdDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM3RSxNQUFNLGdCQUFnQixHQUNwQixNQUFBLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsbUNBQ3RFLEVBQWtCLENBQUM7WUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxDQUFDO1NBQ25FO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsdUJBQXVCLENBQ3JCLElBQW1DLEVBQ25DLFdBQW1CLEVBQ25CLGlCQUE2Qzs7UUFFN0MsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzdFLE1BQU0saUJBQWlCLEdBQ3JCLE1BQUEsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQ0FDdEUsRUFBa0IsQ0FBQztZQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLENBQUM7U0FDdEU7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx3QkFBd0IsQ0FDdEIsSUFBbUMsRUFDbkMsV0FBbUIsRUFDbkIsaUJBQTZDOztRQUU3QyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDN0UsTUFBTSxtQkFBbUIsR0FDdkIsTUFBQSxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG1DQUN0RSxFQUFrQixDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztTQUMvRTthQUFNO1lBQ0wsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILCtCQUErQixDQUM3QixJQUFtQyxFQUNuQyxXQUFtQixFQUNuQixpQkFBNkM7O1FBRTdDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM3RSxNQUFNLDBCQUEwQixHQUM5QixNQUFBLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsbUNBQ3RFLEVBQWtCLENBQUM7WUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRywwQkFBMEIsQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNoRzthQUFNO1lBQ0wsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDRCQUE0QixDQUMxQixJQUFtQyxFQUNuQyxXQUFtQixFQUNuQixpQkFBNkM7O1FBRTdDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM3RSxNQUFNLHVCQUF1QixHQUMzQixNQUFBLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsbUNBQ3RFLEVBQWtCLENBQUM7WUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyx1QkFBdUIsQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNyRjthQUFNO1lBQ0wsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlCQUF5QixDQUN2QixJQUFtQyxFQUNuQyxXQUFtQixFQUNuQixpQkFBNkM7O1FBRTdDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM3RSxNQUFNLGVBQWUsR0FDbkIsQ0FBQyxDQUFBLE1BQUEsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQ0FBRSxlQUFlLENBQUE7Z0JBQ3pGLElBQUksQ0FBQztZQUNQLE9BQU8sZUFBZSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLElBQUk7WUFDRixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUM5RSxJQUFJLFVBQVUsRUFBRTtnQkFDZCxPQUFPLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUMvQztpQkFBTTtnQkFDTCxPQUFPLFFBQVEsQ0FBQzthQUNqQjtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sUUFBUSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxNQUF1Qjs7UUFDcEMsT0FBTyxDQUNMLENBQUEsTUFBQSxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLDBDQUFFLFFBQVEsMENBQUUsSUFBSSxNQUFLLFNBQVM7WUFDeEQsQ0FBQSxNQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsMENBQUUsUUFBUSwwQ0FBRSxJQUFJLE1BQUssU0FBUztZQUN2RCxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLEdBQVE7UUFDckIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2hDLElBQUksSUFBSSxLQUFLLFlBQVksRUFBRTtnQkFDekIsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbEI7aUJBQU07Z0JBQ0wsT0FBTyxHQUFHLENBQUM7YUFDWjtRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsdUJBQXVCLENBQUMsR0FBUTtRQUM5QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwwQkFBMEIsQ0FBQyxPQUFjO1FBQ3ZDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO1lBQ3JGLDZLQUE2SztZQUM3SyxPQUFPLENBQUMsQ0FBQztTQUNWO1FBRUQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLEVBQUU7WUFDMUIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDM0IsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDeEI7U0FDRjtRQUNELE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxNQUFxQixFQUFFLFVBQXNCO1FBQ2xFLE1BQU0sT0FBTyxHQUFvQixFQUFFLENBQUM7UUFFcEMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQ2hGLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FDNUIsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQW1CLEVBQUUsRUFBRSxDQUM5RSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQzVCLENBQUM7UUFFRiwwSUFBMEk7UUFDMUksSUFBSSxVQUFVLEVBQUU7WUFDZCxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUMxRCxJQUNFLGVBQWUsQ0FBQyxLQUFLLENBQ25CLENBQUMsSUFBd0IsRUFBRSxFQUFFLENBQzNCLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGdCQUFnQixNQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7Z0JBQzlELElBQUksQ0FBQyxhQUFhLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FDMUQsRUFDRDtnQkFDQSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7YUFDbEM7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN0QjtTQUNGO2FBQU0sSUFBSSxTQUFTLEVBQUU7WUFDcEIsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDeEQsSUFDRSxjQUFjLENBQUMsS0FBSyxDQUNsQixDQUFDLElBQXdCLEVBQUUsRUFBRSxDQUMzQixJQUFJLENBQUMsZ0JBQWdCLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtnQkFDNUQsSUFBSSxDQUFDLGFBQWEsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUN6RCxFQUNEO2dCQUNBLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQzthQUNqQztpQkFBTTtnQkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3RCO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEI7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsdUJBQXVCLENBQUMsYUFBcUI7UUFDM0MsT0FBTyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxJQUFJLGFBQWEsQ0FBQztJQUMvRSxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQXNCOztRQUNwQyxJQUFJLE1BQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLE9BQU8sMENBQUUsSUFBSTtZQUFFLE9BQU8sTUFBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsT0FBTywwQ0FBRSxJQUFJLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FBRyxDQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGVBQWUsMENBQUUsTUFBTTtZQUNoRCxDQUFDLENBQUMsQ0FBQSxNQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsMENBQUUsb0JBQW9CLDBDQUFFLFdBQVcsRUFBRSxNQUFLLFdBQVcsQ0FBQyxRQUFRO1lBQzFGLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDVixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssQ0FBQyxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFdBQVcsQ0FBQTtnQkFDeEIsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFlBQVksQ0FBQTtnQkFDekIsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzNCLEtBQUssQ0FBQyxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGFBQWEsQ0FBQTtnQkFDMUIsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFVBQVUsQ0FBQTtnQkFDdkIsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGNBQWMsQ0FBQTtnQkFDM0IsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQzdCLEtBQUssVUFBVTtnQkFDYixPQUFPLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDOUIsS0FBSyxDQUFDLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsZUFBZSxDQUFBO2dCQUM1QixPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDNUIsS0FBSyxDQUFDLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsV0FBVyxDQUFBO2dCQUN4QixPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDNUIsS0FBSyxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxlQUFlLEtBQUksQ0FBQyxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxXQUFXLENBQUE7Z0JBQ2xELE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUMvQjtnQkFDRSxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhLEVBQUUsR0FBVztRQUNyQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7U0FDM0M7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCx3Q0FBd0MsQ0FBQyxNQUFxQjtRQUM1RCxNQUFNLGtCQUFrQixHQUF1QjtZQUM3QyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUM3QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDM0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDekMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLG1CQUFtQjtZQUMvQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1lBQzNDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7WUFDakQsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtZQUM3Qyx3QkFBd0IsRUFBRSxNQUFNLENBQUMsd0JBQXdCO1lBQ3pELHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0I7WUFDckQsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLG1CQUFtQjtZQUMvQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7WUFDbkMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1lBQ25DLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtZQUNuQyxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7WUFDckMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDekMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDOUIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtZQUN6QyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsc0JBQXNCO1lBQ3JELG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7WUFDakQscUJBQXFCLEVBQUUsTUFBTSxDQUFDLHFCQUFxQjtZQUNuRCxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7WUFDckMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1lBQ25DLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDekMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLHNCQUFzQjtZQUNyRCxvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CO1lBQ2pELHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxxQkFBcUI7WUFDbkQsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1lBQ25DLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxtQkFBbUI7WUFDL0MsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjtZQUMzQyxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7WUFDckMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjO1lBQ3JDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7WUFDbkMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1NBQzlCLENBQUE7UUFFRCxPQUFPLGtCQUFrQixDQUFDO0lBQzVCLENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxVQUF1QjtRQUN0RCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFjO1lBQy9DLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRTtTQUNqQixDQUFBLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFQzs7O0tBR0M7SUFDRCxrQkFBa0IsQ0FBQyxRQUFlO1FBQ2hDLE9BQU8sUUFBUTthQUNaLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO2FBQ3BCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO2FBQ3BCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVHOzs7RUFHSDtJQUNHLGlCQUFpQixDQUFDLFFBQWU7UUFDL0IsT0FBTyxRQUFRO2FBQ1osT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDbkIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDbkIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDOztBQWgwRUEsbUNBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDcEMsbUNBQWdCLEdBQUcsT0FBTyxDQUFDO0FBQzNCLDhCQUFXLEdBQUcsUUFBUSxDQUFDO0FBQ3ZCLDJDQUF3QixHQUFHLHFCQUFxQixDQUFDO0FBQ2pELGtDQUFlLEdBQUcsWUFBWSxDQUFDO0FBQy9CLHVDQUFvQixHQUFHLGtCQUFrQixDQUFDO0FBQzFDLDZDQUEwQixHQUFHLFVBQVUsQ0FBQztBQUN4Qyw4Q0FBMkIsR0FBRywwQkFBMEIsQ0FBQztBQUN6RCw4QkFBVyxHQUFHLE1BQU0sQ0FBQztBQUNyQixvQ0FBaUIsR0FBRyxPQUFPLENBQUM7QUFDNUIsOEJBQVcsR0FBRyxVQUFVLENBQUM7QUFDekIsMENBQXVCLEdBQUcsc0JBQXNCLENBQUM7QUFDakQsZ0NBQWEsR0FBOEI7SUFDaEQsR0FBRyxFQUFFLENBQUM7SUFDTixHQUFHLEVBQUUsQ0FBQztJQUNOLEdBQUcsRUFBRSxDQUFDO0lBQ04sR0FBRyxFQUFFLENBQUM7SUFDTixHQUFHLEVBQUUsQ0FBQztJQUNOLEdBQUcsRUFBRSxDQUFDO0lBQ04sR0FBRyxFQUFFLENBQUM7SUFDTixHQUFHLEVBQUUsQ0FBQztJQUNOLEdBQUcsRUFBRSxDQUFDO0NBQ1AsQ0FBQztBQTBpQ0Y7SUFEQyxRQUFRLEVBQUU7Ozs7MkRBR1Y7QUFHRDtJQURDLFFBQVEsRUFBRTs7Ozt1REFJVjtBQUdEO0lBREMsUUFBUSxFQUFFOzs7O3VEQTBCVjtBQWd1Q0gsU0FBUyxLQUFLLENBQUMsR0FBUTtJQUNyQixPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQztBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IF8sIHsgZm9yRWFjaCB9IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcblxuaW1wb3J0IHsgQmFza2V0RGV0YWlscyB9IGZyb20gJy4uL3NlcnZpY2VzL2VudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xuLy8gaW1wb3J0IHsgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkIH0gZnJvbSAnLi9tYW5hZ2VtZW50LWluZm8tYW5kLXZhbGlkJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XG5pbXBvcnQge1xuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxuICBGbGlnaHRHcm91cHMsXG4gIE1haW5GbGlnaHRDYWJpbkNsYXNzLFxuICBNaW5NYXgsXG4gIE5nYkRhdGVTdHJ1Y3QsXG4gIE9CVEZsaWdodENhYmluQ2xhc3MsXG4gIE9CVFJhaWxKb3VybmV5RmFyZSxcbiAgU2NoZW1hLFxuICBVbnBhY2tlZCxcbiAgUHJlZmVycmVkRmxhZ3MsXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSxcbiAgVHJhdmVsUG9saWNpZXNcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtcbiAgQWlycG9ydCxcbiAgQmFnZ2FnZUFsbG93YW5jZSxcbiAgQmFza2V0SXRlbSxcbiAgQ2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHksXG4gIEZhcmVDb25kaXRpb25zLFxuICBGbGlnaHRDYWJpbkNsYXNzLFxuICBGbGlnaHRJdGluZXJhcnksXG4gIEZsaWdodEpvdXJuZXksXG4gIFBhc3NlbmdlclR5cGUsXG4gIFJlY2VudFNlYXJjaFRyYXZlbGxlcixcbiAgU2VydmljZSxcbiAgU2VydmljZVR5cGUsXG4gIFVzZXJQYXNzZW5nZXJUeXBlSW5wdXQsXG4gIElucHV0RmxpZ2h0Sm91cm5leSxcbiAgVHJhdmVsbGVyQXJnXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHsgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc3VwcGxlbWVudGFyeS1ib29raW5nLWluZm8taW1wbCc7XG5pbXBvcnQgeyBNZW1vcmlzZSB9IGZyb20gJy4vbGltaXRlZC1jYWNoZS5jbGFzcyc7XG5pbXBvcnQgeyBGbGlnaHRGaWx0ZXJzLCBGbGlnaHRGaWx0ZXJzUmVjb3JkS2V5cyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LWZpbHRlcnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJ1bGVzLCBVbmF2YWlsYWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvc3VtbWFyeS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VsZWN0RmlsdGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3QtZmlsdGVyLmludGVyZmFjZSc7XG5cbmRlY2xhcmUgdmFyIGhleF9obWFjX21kNTogYW55O1xuXG5jb25zdCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDE2O1xuY29uc3QgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XG5jb25zdCBFVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XG5jb25zdCBDT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTU7XG5jb25zdCBMT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxMjtcbmNvbnN0IEZMSUdIVF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XG5jb25zdCBSQUlMX01BWF9JTkZBTlRfQUdFX1lFQVJTID0gMDtcbmNvbnN0IENPQUNIX01BWF9JTkZBTlRfQUdFX1lFQVJTID0gMDtcbmNvbnN0IExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xuY29uc3QgTUVUUkVTX1RPX01JTEVTX0NPTlZFUlNJT04gPSAxNjA5O1xuY29uc3QgVElNRV9CQVNFID0gNjA7XG5jb25zdCBHUk9VUF9USUNLRVRfQ09ERVMgPSBbJ0dTJywgJ0FJRycsICdHUlAnLCAnR1UzJywgJ0dVNCcsICdHVUMnLCAnTVBHJywgJzJUUicsICdTR1UnLCAnR1NVJ107XG5cbmV4cG9ydCBjbGFzcyBCYXNlSGVscGVyUm91dGluZXMge1xuICBzdGF0aWMgUkVBRF9EQVRFX0ZPUk1BVCA9ICdkZCwgRCBNTU0gWVlZWSc7XG4gIHN0YXRpYyBSRUFEX1RJTUVfRk9STUFUID0gJ0hIOm1tJztcbiAgc3RhdGljIERBVEVfRk9STUFUID0gJ1lZTU1ERCc7XG4gIHN0YXRpYyBHUkFQSFFMX0RBVEFfRk9STUFUX1RJTUUgPSAnWVlZWS1NTS1ERCBISDptbTpzcyc7XG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVQgPSAnWVlZWS1NTS1ERCc7XG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVRfVElNRSA9ICdZWVlZLU1NLUREIEhIOm1tJztcbiAgc3RhdGljIElTT19EQVRBX0ZPUk1BVF9OT19IWVBIQU5TID0gJ1lZWVlNTUREJztcbiAgc3RhdGljIEdST1VORFNQQU5fREFUQV9USU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1onO1xuICBzdGF0aWMgVElNRV9GT1JNQVQgPSAnSEhtbSc7XG4gIHN0YXRpYyBUSU1FX0ZPUk1BVF9DT0xPTiA9ICdISDptbSc7XG4gIHN0YXRpYyBNTUREWVlfREFURSA9ICdERE1NWVlZWSc7XG4gIHN0YXRpYyBHUkFQSFFMX0RBVEVUSU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XG4gIHN0YXRpYyBwcmVmZXJyZWRGbGlwOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge1xuICAgICcxJzogOSxcbiAgICAnMic6IDgsXG4gICAgJzMnOiA3LFxuICAgICc0JzogNixcbiAgICAnNSc6IDUsXG4gICAgJzYnOiA0LFxuICAgICc3JzogMyxcbiAgICAnOCc6IDIsXG4gICAgJzknOiAxXG4gIH07XG5cbiAgaXNHcm91cFRpY2tldChjb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gR1JPVVBfVElDS0VUX0NPREVTLmluY2x1ZGVzKGNvZGUudG9VcHBlckNhc2UoKS50cmltKCkpO1xuICB9XG5cbiAgbWluVG9Ib3VyKGR1cjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke01hdGguZmxvb3IoZHVyIC8gNjApfWggJHtkdXIgJSA2MH1tYDtcbiAgfVxuXG4gIG1ha2VDb2xvblRpbWUodGltZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRpbWUuc3Vic3RyaW5nKDAsIDIpICsgJzonICsgdGltZS5zdWJzdHJpbmcoMiwgNCk7XG4gIH1cblxuICBub25OdWxsTWluKGtleTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShcbiAgICAgIChjdXJyZW50LCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW1ba2V5XSkge1xuICAgICAgICAgIGlmIChjdXJyZW50Lm1pbiA+IE51bWJlcihpdGVtW2tleV0pKSB7XG4gICAgICAgICAgICByZXR1cm4geyBpdGVtLCBtaW46IE51bWJlcihpdGVtW2tleV0pIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSxcbiAgICAgIHsgbWluOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgaXRlbTogbnVsbCB9XG4gICAgKS5pdGVtO1xuICB9XG5cbiAgam9pbkJ5Q29tbWEoLi4uYXR0cmlidXRlczogYW55W10pOiBzdHJpbmcge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgICAucmVkdWNlKChhY2MsIGF0dHIpID0+IHtcbiAgICAgICAgaWYgKF8uaXNFbXB0eShhdHRyKSkge1xuICAgICAgICAgIGFjYyArPSBhdHRyICsgJywnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCAnJylcbiAgICAgIC5zbGljZSgwLCAtMSk7XG4gIH1cblxuICBtdXR1YWxseUluY2x1ZGUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGEuaW5jbHVkZXMoYikgfHwgYi5pbmNsdWRlcyhhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1RyeWluZyB0byBtdXR1YWxseSBjb21wYXJlIHVuZGVmaW5lZCB2YXJpYWJsZS4nKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmaW5kQnlLZXkoYXJyYXk6IGFueVtdLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIGFycmF5XG4gICAgICAuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSB2YWx1ZTtcbiAgICAgIH0pXG4gICAgICAucG9wKCk7XG4gIH1cblxuICBkYXRlVG9OZ0RhdGUoZGF0ZTogRGF0ZSk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB7XG4gICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcbiAgICB9O1xuICB9XG5cbiAgY29udmVydFRvWVlNTUREKGRhdGU6IHN0cmluZykge1xuICAgIGlmIChkYXRlLmxlbmd0aCA+IDYpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy55eXl5bW1kZFRpbWVUb01vbWVudChkYXRlKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgZm9ybWF0RGF0ZVRvTU1ERFlZWShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xuICB9XG5cbiAgZm9ybWF0RGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuREFURV9GT1JNQVQpO1xuICB9XG5cbiAgZm9ybWF0VGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5USU1FX0ZPUk1BVCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXRUaW1lQ29sb24oZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLlRJTUVfRk9STUFUX0NPTE9OKTtcbiAgfVxuXG4gIGZvcm1hdElzb0RhdGUoZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVCk7XG4gIH1cblxuICBmb3JtYXRJc29EYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX1RJTUUpO1xuICB9XG5cbiAgZm9ybWF0R3JhcGhRTERhdGVUaW1lKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5HUkFQSFFMX0RBVEFfRk9STUFUX1RJTUUpO1xuICB9XG5cbiAgZm9ybWF0QWx0R3JhcGhxUUxEYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuR1JBUEhRTF9EQVRFVElNRV9GT1JNQVQpO1xuICB9XG5cbiAgZm9ybWF0R3JvdW5kc3BhbkRhdGVUaW1lKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XG4gICAgY29uc3QgaW5wdXREYXRlU3RyaW5nID0gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLkdST1VORFNQQU5fREFUQV9USU1FX0ZPUk1BVCk7XG4gICAgcmV0dXJuIGlucHV0RGF0ZVN0cmluZy5yZXBsYWNlKC9cXCtcXGR7Mn06XFxkezJ9JC8sICdaJyk7XG4gIH1cblxuICBmb3JtYXRJc29EYXRlTm9IeXBoYW5zKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5JU09fREFUQV9GT1JNQVRfTk9fSFlQSEFOUyk7XG4gIH1cblxuICBnZW5lcmF0ZVRpbWVzTGlzdChmcm9tID0gMCwgdG8gPSAyNCwgc3RlcCA9IDE1KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRhdGVUaW1lQXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaG91ciA9IDA7IGhvdXIgPCB0byAtIGZyb207IGhvdXIrKykge1xuICAgICAgZm9yIChsZXQgbWludXRlID0gMDsgbWludXRlIDwgNjA7IG1pbnV0ZSArPSBzdGVwKSB7XG4gICAgICAgIGRhdGVUaW1lQXJyYXkucHVzaChtb21lbnQoeyBob3VyLCBtaW51dGUgfSkuZm9ybWF0KCdISDptbScpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGVUaW1lQXJyYXk7XG4gIH1cblxuICBtb21lbnRUb05nRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50IHwgc3RyaW5nKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcbiAgICByZXR1cm4gdGhpcy5kYXRlVG9OZ0RhdGUoZGF0ZS50b0RhdGUoKSk7XG4gIH1cblxuICBuZ0RhdGVUb0RhdGUoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGggLSAxLCBkYXRlLmRheSk7XG4gIH1cblxuICBuZ0RhdGVUb01vbWVudChkYXRlOiBOZ2JEYXRlU3RydWN0LCB0aW1lPzogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XG4gICAgY29uc3QgbW9tID0gbW9tZW50KHRoaXMubmdEYXRlVG9EYXRlKGRhdGUpKTtcbiAgICBpZiAodGltZSkge1xuICAgICAgY29uc3QgdGltZXMgPSB0aW1lLnNwbGl0KCc6Jyk7XG4gICAgICBpZiAodGltZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIG1vbS5zZXQoJ2hvdXJzJywgTnVtYmVyKHRpbWVzWzBdKSkuc2V0KCdtaW51dGVzJywgTnVtYmVyKHRpbWVzWzFdKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb20uc2V0KCdob3VycycsIE51bWJlcih0aW1lLnN1YnN0cmluZygwLCAyKSkpLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lLnN1YnN0cmluZygyLCA0KSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9tO1xuICB9XG5cbiAgdG9kYXlUb05nYkRhdGVTdHJ1Y3QoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgY29uc3QgdG9kYXkgPSBtb21lbnQoKTtcbiAgICByZXR1cm4geyB5ZWFyOiB0b2RheS55ZWFyKCksIG1vbnRoOiB0b2RheS5tb250aCgpICsgMSwgZGF5OiB0b2RheS5kYXRlKCkgfTtcbiAgfVxuXG4gIG9iamVjdFRvQXJyYXkob2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubWFwKGkgPT4gb2JqZWN0W2ldKTtcbiAgfVxuXG4gIHl5eXltbWRkVG9EYXRlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDAsIDQpKSxcbiAgICAgIE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoNCwgNikpIC0gMSxcbiAgICAgIE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoNiwgOCkpXG4gICAgKTtcbiAgfVxuXG4gIHl5eXltbWRkVG9Nb21lbnQodmFsdWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiBtb21lbnQodGhpcy55eXl5bW1kZFRvRGF0ZSh2YWx1ZSkpO1xuICB9XG5cbiAgeXltbWRkVG9Nb21lbnQodmFsdWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiBtb21lbnQodmFsdWUsICdZWU1NREQnKTtcbiAgfVxuXG4gIHl5bW1kZFRvTmdiRGF0ZSh2YWx1ZTogc3RyaW5nKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUodGhpcy55eW1tZGRUb01vbWVudCh2YWx1ZSkpO1xuICB9XG5cbiAgeXltbWRkX2hobW1Ub01vbWVudChkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiBtb21lbnQoYCR7ZGF0ZX0gJHt0aW1lfWAsICdZWU1NREQgSEhtbScpO1xuICB9XG5cbiAgeXl5eW1tZGRfaGhtbVRvTW9tZW50KGRhdGU6IHN0cmluZywgdGltZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfSAke3RpbWV9YCwgJ1lZWVlNTUREIEhIbW0nKTtcbiAgfVxuXG4gIHl5eXltbWRkVG9OZ0RhdGUodmFsdWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB0aGlzLmRhdGVUb05nRGF0ZSh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XG4gIH1cblxuICB5eXl5bW1kZFRpbWVUb05nRGF0ZShkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIGNvbnN0IGR0ID0gdGhpcy55eXl5bW1kZFRvTW9tZW50KGRhdGUpXG4gICAgICAuYWRkKE51bWJlcih0aW1lLnN1YnN0cmluZygwLCAyKSksICdob3VycycpXG4gICAgICAuYWRkKE51bWJlcih0aW1lLnN1YnN0cmluZygyLCA0KSksICdtaW51dGVzJyk7XG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUoZHQpO1xuICB9XG5cbiAgeXl5eW1tZGRUaW1lVG9Nb21lbnQoZGF0ZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XG4gICAgaWYgKGRhdGUubGVuZ3RoID09PSA2KSB7XG4gICAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9YCwgJ1lZTU1ERCcpO1xuICAgIH1cbiAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9YCwgJ1lZWVlNTUREJyk7XG4gIH1cblxuICBoaG1tVG9UaW1lKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgMil9OiR7dmFsdWUuc3Vic3RyaW5nKDIsIDQpfWA7XG4gIH1cblxuICBkYXRlU3RyaW5nVG95eXl5bW1kZChkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodHlwZW9mIGQgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbSA9IC8oXFxkezR9KVstXFwvXT8oXFxkezJ9KVstXFwvXT8oXFxkezJ9KS8uZXhlYyhkKTtcbiAgICByZXR1cm4gbSA/IGAke21bMV19JHttWzJdfSR7bVszXX1gIDogbnVsbDtcbiAgfVxuXG4gIHRpbWVTdHJpbmdUb2hoX21tKHQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0eXBlb2YgdCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBtID0gLyhcXGR7Mn0pWzotXT8oXFxkezJ9KS8uZXhlYyh0KTtcbiAgICByZXR1cm4gbSA/IGAke21bMV19OiR7bVsyXX1gIDogbnVsbDtcbiAgfVxuXG4gIHN0cmluZ1RvQm9vbChzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcyAmJiBzICE9PSAnZmFsc2UnICYmIHMgIT09ICcwJyAmJiBzICE9PSAnbm8nICYmIHMgIT09ICduJztcbiAgfVxuXG4gIGNsb25lPFQgPSBhbnk+KHRvQ2xvbmU6IFQpOiBUIHtcbiAgICAvLyBjb25zb2xlLndhcm4oJysrKyBCRUdVTiBUSEUgQ0xPTkUgV0FSUyBIQVMgKysrJyk7XG4gICAgcmV0dXJuIF8uY2xvbmVEZWVwKHRvQ2xvbmUpIGFzIFQ7XG4gIH1cblxuICByZXBsYWNlS2V5c0luVGV4dCh0ZXh0OiBzdHJpbmcsIHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykucmVkdWNlKChjdXJyZW50LCBrZXkpID0+IHtcbiAgICAgIHJldHVybiBjdXJyZW50LnJlcGxhY2UoJyUnICsga2V5LCByZXBsYWNlbWVudHNba2V5XSk7XG4gICAgfSwgdGV4dCk7XG4gIH1cblxuICBnZXROZXh0TWludWV0cyhkYXRlOiBtb21lbnQuTW9tZW50ID0gbW9tZW50KCksIG1pbnV0ZXNUb1JvdW5kID0gMTUpIHtcbiAgICBkYXRlLm1pbnV0ZShNYXRoLmNlaWwoZGF0ZS5taW51dGUoKSAvIG1pbnV0ZXNUb1JvdW5kKSAqIG1pbnV0ZXNUb1JvdW5kKTtcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoJ0hIOm1tJyk7XG4gIH1cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqIEJlbG93IGFyZSBmdW5jdGlvbnMgbmVlZGVkIGZvciBnZW5lcmF0aW5nIHRoZSBoYXNoZWQgbnVtYmVyIG9uY2UgdG9rZW4sIHRha2VuIGFzIHJlcXVpcmVkXHQqXG4gICAqIERvbid0IE1lc3Mgd2l0aCB0aGVzZVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICBnZXROdW1iZXJPbmNlVmFsdWUodG9rZW46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tX3ZhbHVlID0gdGhpcy5ndWlkKCk7XG4gICAgcmV0dXJuIHJhbmRvbV92YWx1ZSArICdfJyArIGhleF9obWFjX21kNSh0b2tlbiwgcmFuZG9tX3ZhbHVlKTtcbiAgfVxuXG4gIGd1aWQoKTogYW55IHtcbiAgICBsZXQgcmFuZG9tX2hleCA9ICcnO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzMjsgaSsrKSB7XG4gICAgICByYW5kb21faGV4ICs9IHRoaXMuczQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZG9tX2hleDtcbiAgfVxuXG4gIHM0KCk6IGFueSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApXG4gICAgICAudG9TdHJpbmcoMTYpXG4gICAgICAuc3Vic3RyaW5nKDEpO1xuICB9XG5cbiAgY2FwaXRhbGlzZUZpcnN0TGV0dGVyKHdvcmQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHdvcmRbMF0udG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIGZyb21PYmplY3QoLi4uYXJnczogYW55W10pOiBhbnkge1xuICAgIGxldCBkYXRhID0gYXJncy5zaGlmdCgpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgZGF0YSAmJiBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBkYXRhID0gZGF0YVthcmdzW2luZGV4XV07XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgbW9tZW50Um91bmRNaW51dGVzKHRpbWU6IG1vbWVudC5Nb21lbnQsIHJvdW5kOiBudW1iZXIpOiBtb21lbnQuTW9tZW50IHtcbiAgICB0aW1lID0gbW9tZW50KHRpbWUpLnN0YXJ0T2YoJ21pbnV0ZXMnKTtcbiAgICBsZXQgZGlmZiA9IHRpbWUubWludXRlcygpICUgcm91bmQ7XG4gICAgaWYgKGRpZmYgIT09IDApIHtcbiAgICAgIGRpZmYgPSByb3VuZCAtIGRpZmY7XG4gICAgfVxuICAgIHJldHVybiB0aW1lLmFkZChkaWZmLCAnbWludXRlJyk7XG4gIH1cblxuICByb3VuZChkYXRlOiBhbnksIGR1cmF0aW9uOiBhbnkpIHtcbiAgICByZXR1cm4gbW9tZW50KE1hdGguY2VpbCgrZGF0ZSAvICtkdXJhdGlvbikgKiArZHVyYXRpb24pO1xuICB9XG5cbiAgaWNzRm9sZChib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmVzID0gYm9keS5zcGxpdCgvXFxyXFxuL2cpO1xuICAgIHJldHVybiBsaW5lc1xuICAgICAgLm1hcChsaW5lID0+IHtcbiAgICAgICAgbGV0IHJlcyA9ICcnO1xuICAgICAgICBjb25zdCBuID0gNzI7XG4gICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICAgICAgd2hpbGUgKGxpbmUubGVuZ3RoID4gbikge1xuICAgICAgICAgIHJlcyArPSBgJHtsaW5lLnNsaWNlKDAsIG4pfVxcclxcbmA7XG4gICAgICAgICAgbGluZSA9IGAgJHtsaW5lLnNsaWNlKG4pLnRyaW0oKX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5lLnRyaW0oKSkge1xuICAgICAgICAgIHJlcyArPSBsaW5lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJ1xcclxcbicpO1xuICB9XG5cbiAgc3BsaXRBZGRyZXNzTGluZShsaW5lOiBzdHJpbmcsIGxlbjogbnVtYmVyKTogeyBsaW5lOiBzdHJpbmc7IHJlc2lkdWU6IHN0cmluZyB9IHtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICBsaW5lOiBsaW5lLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksXG4gICAgICByZXNpZHVlOiAnJ1xuICAgIH07XG4gICAgaWYgKHJlcy5saW5lLmxlbmd0aCA+IGxlbikge1xuICAgICAgbGV0IGkgPSByZXMubGluZS5zbGljZSgwLCBsZW4pLmxhc3RJbmRleE9mKCcsJyk7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgcmVzLnJlc2lkdWUgPSByZXMubGluZS5zbGljZShpICsgMSkudHJpbSgpO1xuICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGkpLnRyaW0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkgPSByZXMubGluZS5zbGljZSgwLCBsZW4pLmxhc3RJbmRleE9mKCcgJyk7XG4gICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgIHJlcy5yZXNpZHVlID0gcmVzLmxpbmUuc2xpY2UoaSArIDEpLnRyaW0oKTtcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcy5yZXNpZHVlID0gcmVzLmxpbmUuc2xpY2UobGVuKTtcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGRheXNCZXR3ZWVuKHN0YXJ0OiBtb21lbnQuTW9tZW50LCBlbmQ6IG1vbWVudC5Nb21lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBlbmQuZGlmZihzdGFydCwgJ2RheXMnKTtcbiAgfVxuXG4gIG1hcFByb21pc2U8VCA9IGFueSwgUiA9IGFueT4oXG4gICAgYTogVFtdLFxuICAgIGY6ICh2YWw6IFQsIGluZGV4OiBudW1iZXIpID0+IFIgfCBQcm9taXNlPFI+LFxuICAgIG1heD86IG51bWJlclxuICApOiBQcm9taXNlPFJbXT4ge1xuICAgIGNvbnN0IGl0ID0gYVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgY29uc3QgcmVzdWx0OiBSW10gPSBbXTtcbiAgICBjb25zdCBidWZmZXI6IFByb21pc2U8Uj5bXSA9IFtdO1xuICAgIGxldCBpID0gMDtcbiAgICBjb25zdCBuZXh0ZiA9ICgpOiBQcm9taXNlPFI+ID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBpdC5uZXh0KCk7XG4gICAgICBpZiAobmV4dC5kb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4ID0gaSsrO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmKG5leHQudmFsdWUsIGluZGV4KSkudGhlbih2YWwgPT4ge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gdmFsO1xuICAgICAgICByZXR1cm4gbmV4dGYoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgd2hpbGUgKCFtYXggfHwgYnVmZmVyLmxlbmd0aCA8PSBtYXgpIHtcbiAgICAgIGNvbnN0IG4gPSBuZXh0ZigpO1xuICAgICAgaWYgKG4pIHtcbiAgICAgICAgYnVmZmVyLnB1c2gobik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGJ1ZmZlcikudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgbWFwU2VyaWVzUHJvbWlzZTxUID0gYW55LCBSID0gYW55PihcbiAgICBhOiBUW10sXG4gICAgZjogKHZhbDogVCwgaW5kZXg6IG51bWJlcikgPT4gUiB8IFByb21pc2U8Uj5cbiAgKTogUHJvbWlzZTxSW10+IHtcbiAgICByZXR1cm4gdGhpcy5tYXBQcm9taXNlKGEsIGYsIDEpO1xuICB9XG5cbiAgb2JqMnF1ZXJ5U3RyaW5nKG9iajogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gXy5yZWR1Y2UoXG4gICAgICBvYmosXG4gICAgICAoYSwgdiwgaykgPT4ge1xuICAgICAgICBpZiAoYSAhPT0gJycpIHtcbiAgICAgICAgICBhICs9ICcmJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7YX0ke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YDtcbiAgICAgIH0sXG4gICAgICAnJ1xuICAgICk7XG4gIH1cblxuICBzdHJpcFB1bmN0dWF0aW9uKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHMucmVwbGFjZSgvW15hLXpBLVowLTlcXHNdL2csICcnKTtcbiAgfVxuXG4gIHJlcGxhY2VBbGwoaGF5c3RhY2s6IHN0cmluZywgbmVlZGxlOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBoYXlzdGFjayA/IGhheXN0YWNrLnJlcGxhY2UobmV3IFJlZ0V4cChuZWVkbGUsICdnJyksIHJlcGxhY2VtZW50KSA6IG51bGw7XG4gIH1cblxuICBkYXRlVGltZShzYWJzRGF0ZTogc3RyaW5nLCBzYWJzVGltZTogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCB0ZW1wRGF0ZSA9IHNhYnNEYXRlLm1hdGNoKC8uezEsMn0vZyk7IC8vIHNwbGl0cyBldmVyeSAyIGNoYXJhY3RlcnNcbiAgICBjb25zdCB0ZW1wVGltZSA9IHNhYnNUaW1lLm1hdGNoKC8uezEsMn0vZyk7XG5cbiAgICBjb25zdCBuZXdTdHIgPVxuICAgICAgJzIwJyArXG4gICAgICB0ZW1wRGF0ZVswXSArXG4gICAgICAnLScgK1xuICAgICAgdGVtcERhdGVbMV0gK1xuICAgICAgJy0nICtcbiAgICAgIHRlbXBEYXRlWzJdICtcbiAgICAgICdUJyArXG4gICAgICB0ZW1wVGltZVswXSArXG4gICAgICAnOicgK1xuICAgICAgdGVtcFRpbWVbMV0gK1xuICAgICAgJzowMCc7XG4gICAgcmV0dXJuIG5ld1N0cjtcbiAgfVxuXG4gIGFsdGVybmF0ZUpTT05TdHJpbmdpZnkoanNvbk9iamVjdDogYW55KTogc3RyaW5nIHtcbiAgICBsZXQganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb25PYmplY3QpO1xuICAgIGpzb25TdHJpbmcgPSBqc29uU3RyaW5nLnJlcGxhY2UoL1wiL2csICdgJyk7XG4gICAgcmV0dXJuIGpzb25TdHJpbmc7XG4gIH1cblxuICAvLyBDb252ZXJ0IG9iamVjdCB0byBhcnJheVxuICBDb252ZXJ0T2JqZWN0VG9BcnJheShvYmplY3Q6IG9iamVjdCk6IGFueVtdIHtcbiAgICBsZXQgYXJyYXkgPSBfLnZhbHVlcyhvYmplY3QpO1xuICAgIGFycmF5ID0gXy5mbGF0dGVuKGFycmF5KTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICBhZGREYXkoZGF0ZVN0cnVjdDogTmdiRGF0ZVN0cnVjdCk6IGFueSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHJ1Y3QueWVhciwgZGF0ZVN0cnVjdC5tb250aCAtIDEsIGRhdGVTdHJ1Y3QuZGF5ICsgMSk7XG4gICAgY29uc3QgcmV0RGF0ZSA9IHtcbiAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCkgKyAxLFxuICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxuICAgIH07XG4gICAgLy8vLyBjb25zb2xlLmxvZyhyZXREYXRlKTtcbiAgICAvLy8vIGNvbnNvbGUubG9nKGRhdGUpO1xuICAgIHJldHVybiByZXREYXRlO1xuICB9XG5cbiAgaGFzaENvZGUodG9Db2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBoYXNoID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9Db2RlLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBjaGFyID0gdG9Db2RlLmNoYXJDb2RlQXQoaSk7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcbiAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1iaXR3aXNlXG4gICAgICBoYXNoID0gaGFzaCAmIGhhc2g7XG4gICAgfVxuICAgIHJldHVybiBoYXNoLnRvU3RyaW5nKCk7XG4gIH1cblxuICBNTWRkeXlUb05nYihkYXRlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5tb21lbnRUb05nRGF0ZShtb21lbnQoZGF0ZSwgQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKSk7XG4gIH1cblxuICBzZWxlY3RlZENoaWxkcmVuVHJhdmVsbGVycyhzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLCB0eXBlOiBTZXJ2aWNlVHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWR1bHRzIGFuZCBjaGlsZHJlbi4gc28gYWx3YXlzIG1hcmsgYXMgYWR1bHRzLlxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4gdHJhdmVsbGVyLmlzQ2hpbGQpO1xuICB9XG5cbiAgc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLCB0eXBlOiBTZXJ2aWNlVHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWR1bHRzIGFuZCBjaGlsZHJlbi4gc28gYWx3YXlzIG1hcmsgYXMgYWR1bHRzLlxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxuICAgICAgICByZXR1cm4geyBhZHVsdHM6IHRyYXZlbGxlcnMsIGNoaWxkcmVuOiBbXSwgaW5mYW50czogW10gfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cmF2ZWxsZXJzLnJlZHVjZShcbiAgICAgICAgICAoXG4gICAgICAgICAgICBhY2N1bToge1xuICAgICAgICAgICAgICBhZHVsdHM6IFRyYXZlbGxlcltdO1xuICAgICAgICAgICAgICBjaGlsZHJlbjogVHJhdmVsbGVyW107XG4gICAgICAgICAgICAgIGluZmFudHM6IFRyYXZlbGxlcltdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRyYXZlbGxlcjogVHJhdmVsbGVyXG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBpZiAodHJhdmVsbGVyLmlzQ2hpbGQpIHtcbiAgICAgICAgICAgICAgaWYgKHRyYXZlbGxlci5pc0luZmFudCkge1xuICAgICAgICAgICAgICAgIGFjY3VtLmluZmFudHMucHVzaCh0cmF2ZWxsZXIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjY3VtLmNoaWxkcmVuLnB1c2godHJhdmVsbGVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWNjdW0uYWR1bHRzLnB1c2godHJhdmVsbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkdWx0czogW10sXG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICBpbmZhbnRzOiBbXVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gIH1cbiAgc2VsZWN0ZWRBZHVsdFRyYXZlbGxlcnMoc2VsZWN0ZWRUcmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSwgdHlwZTogU2VydmljZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGRvIG5vdCBoYXZlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGFkdWx0cyBhbmQgY2hpbGRyZW4uIHNvIGFsd2F5cyBtYXJrIGFzIGFkdWx0cy5cbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkVHJhdmVsbGVycztcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+ICF0cmF2ZWxsZXIuaXNDaGlsZCAmJiAhdHJhdmVsbGVyLmlzSW5mYW50XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzQ2hpbGQodHJhdmVsbGVyOiBUcmF2ZWxsZXIgfCBEYXRlLCBtYXhBZ2U6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0cmF2ZWxsZXIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCBhZHVsdERhdGUgPSBtb21lbnQoKS5hZGQoLW1heEFnZSwgJ3llYXJzJyk7XG4gICAgICByZXR1cm4gYWR1bHREYXRlLmlzQmVmb3JlKG1vbWVudCh0cmF2ZWxsZXIsIEJhc2VIZWxwZXJSb3V0aW5lcy5JU09fREFUQV9GT1JNQVQpLCAnZGF5Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cmF2ZWxsZXIuaXNDaGlsZDtcbiAgICB9XG4gIH1cblxuICBpc0NoaWxkRmxpZ2h0KHRyYXZlbGxlcjogVHJhdmVsbGVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XG4gIH1cblxuICBpc0NoaWxkUmFpbCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcbiAgfVxuXG4gIGlzQ2hpbGRFdXJvc3Rhcih0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XG4gIH1cblxuICB1bmlxQnkoYXJyYXk6IGFueVtdLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIF8udW5pcUJ5KGFycmF5LCB2YWx1ZSk7XG4gIH1cblxuICBpc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHRyYXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBSQUlMX01BWF9DSElMRF9BR0VfWUVBUlMpO1xuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcbiAgICAgIC8vICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBDT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuTG91bmdlOlxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIExPVU5HRVNfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc0luZmFudCh0cmF2ZWxsZXI6IFRyYXZlbGxlciB8IERhdGUsIHRyYXZlbFR5cGU6IFNlcnZpY2VUeXBlKSB7XG4gICAgc3dpdGNoICh0cmF2ZWxUeXBlKSB7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBGTElHSFRfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIFJBSUxfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcbiAgICAgIC8vICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBDT0FDSF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyk7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBMT1VOR0VTX01BWF9JTkZBTlRfQUdFX1lFQVJTKTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldEFnZVR5cGUodHJhdmVsbGVyOiBUcmF2ZWxsZXIsIHRyYXZlbFR5cGU6IFNlcnZpY2VUeXBlKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pc0NoaWxkKHRyYXZlbGxlciwgdHJhdmVsVHlwZSkgPyAnQycgOiAnQSc7XG4gIH1cblxuICBnZXRNYXhDaGlsZEFnZSh0eXBlOiBTZXJ2aWNlVHlwZSk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXG4gICAgICAgICAgLmFkZCgtUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTICsgMSwgJ3llYXJzJylcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XG4gICAgICAvLyBjYXNlIFNlcnZpY2VUeXBlLkVVUk9TVEFSOlxuICAgICAgLy8gIHJldHVybiBtb21lbnQoKS5hZGQoLUVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKS5mb3JtYXQoSGVscGVycy5NTUREWVlfREFURSk7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxuICAgICAgICByZXR1cm4gbW9tZW50KClcbiAgICAgICAgICAuYWRkKC1DT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTICsgMSwgJ3llYXJzJylcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXG4gICAgICAgICAgLmFkZCgtTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTICsgMSwgJ3llYXJzJylcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGVmYXVsdEFkdWx0QWdlKHR5cGU6IFNlcnZpY2VUeXBlKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxuICAgICAgICByZXR1cm4gbW9tZW50KClcbiAgICAgICAgICAuYWRkKC1GTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyAtIDEwLCAneWVhcnMnKVxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXG4gICAgICAgICAgLmFkZCgtUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcbiAgICAgIC8vICByZXR1cm4gbW9tZW50KCkuYWRkKC1FVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XG4gICAgICAgIHJldHVybiBtb21lbnQoKVxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXG4gICAgICAgICAgLmFkZCgtTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxuICAgICAgICAvLyBUaGVzZSB0eXBlcyBkbyBub3QgaGF2ZSBjaGlsZCBwbGFjZXMgc29cbiAgICAgICAgcmV0dXJuIG1vbWVudCgpLmFkZCgtMTgsICd5ZWFycycpLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xuICAgIH1cbiAgICByZXR1cm4gbW9tZW50KCkuYWRkKC0xOCwgJ3llYXJzJykuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XG4gIH1cblxuICB0cmFuc2Zvcm0oYXJyYXk6IGFueVtdLCBjYWxsYmFjazogXy5NZW1vVm9pZEFycmF5SXRlcmF0b3I8YW55LCBhbnlbXT4sIGFjYzogYW55KTogYW55W10ge1xuICAgIHJldHVybiBfLnRyYW5zZm9ybShhcnJheSwgY2FsbGJhY2ssIGFjYyk7XG4gIH1cblxuICBhcnJheVRvT2JqZWN0PFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IGFueSB9PihhcnJheTogVFtdLCBmaWVsZDogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBUIH0ge1xuICAgIHJldHVybiBhcnJheVxuICAgICAgLmZpbHRlcigoZGF0YTogVCkgPT4gISFkYXRhKVxuICAgICAgLnJlZHVjZSgoY29uZmlnczogeyBba2V5OiBzdHJpbmddOiBUIH0sIGNvbmZpZ0l0ZW06IFQpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZ0l0ZW0gJiYgY29uZmlnSXRlbVtmaWVsZF0pIHtcbiAgICAgICAgICBjb25maWdzW2NvbmZpZ0l0ZW1bZmllbGRdXSA9IGNvbmZpZ0l0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmZpZ3M7XG4gICAgICB9LCB7fSk7XG4gIH1cblxuICBzZXRGaWVsZEluT2JqZWN0KG9iajogUmVjb3JkPHN0cmluZywgYW55PiwgZmllbGRzOiBzdHJpbmdbXSwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWVsZCcpO1xuICAgIH1cbiAgICBpZiAoIW9iaikge1xuICAgICAgb2JqID0ge307XG4gICAgfVxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBvYmpbZmllbGRzWzBdXSA9IG9ialtmaWVsZHNbMF1dIHx8IFtdO1xuICAgICAgb2JqW2ZpZWxkc1swXV0ucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpZWxkOiBzdHJpbmcgPSBmaWVsZHNbMF07XG4gICAgICBvYmpbZmllbGRdID0gdGhpcy5zZXRGaWVsZEluT2JqZWN0KG9ialtmaWVsZF0sIGZpZWxkcy5zbGljZSgxKSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBhcnJheVRvT2JqZWN0QXJyYXk8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0sIFEgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IGFueSB9PihcbiAgICBhcnJheTogVFtdLFxuICAgIGZpZWxkczogKHN0cmluZyB8IHN0cmluZ1tdKVtdXG4gICk6IFEge1xuICAgIHJldHVybiBhcnJheVxuICAgICAgLmZpbHRlcigoZGF0YTogVCkgPT4gISFkYXRhKVxuICAgICAgLnJlZHVjZSgoY29uZmlnczogeyBba2V5OiBzdHJpbmddOiBUW10gfSwgY29uZmlnSXRlbTogVCkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZFZhbHVlczogc3RyaW5nW10gPSBmaWVsZHMucmVkdWNlPHN0cmluZ1tdPihcbiAgICAgICAgICAoYWNjdW06IHN0cmluZ1tdLCBmaWVsZDoga2V5b2YgVCB8IChrZXlvZiBUKVtdKTogc3RyaW5nW10gPT4ge1xuICAgICAgICAgICAgbGV0IGZldGNoVmFsdWU6IHN0cmluZyA9IEFycmF5LmlzQXJyYXkoZmllbGQpXG4gICAgICAgICAgICAgID8gZmllbGRcbiAgICAgICAgICAgICAgICAgIC5tYXAoKGtleToga2V5b2YgVCkgPT4gdGhpcy5maWVsZEZyb21PYmplY3QoY29uZmlnSXRlbSwga2V5IGFzIHN0cmluZykpXG4gICAgICAgICAgICAgICAgICAuam9pbignXycpXG4gICAgICAgICAgICAgIDogdGhpcy5maWVsZEZyb21PYmplY3QoY29uZmlnSXRlbSwgZmllbGQgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgaWYgKGZldGNoVmFsdWUgPT09ICdBUEFSVE1FTlQnKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hWYWx1ZSA9IFNlcnZpY2VUeXBlLkxvbmdTdGF5cztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjY3VtICYmIGZldGNoVmFsdWUpIHtcbiAgICAgICAgICAgICAgYWNjdW0ucHVzaChmZXRjaFZhbHVlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgICAgICBpZiAoY29uZmlnSXRlbSAmJiBmaWVsZFZhbHVlcykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNldEZpZWxkSW5PYmplY3QoY29uZmlncywgZmllbGRWYWx1ZXMsIGNvbmZpZ0l0ZW0pO1xuICAgICAgICB9XG4gICAgICB9LCB7fSk7XG4gIH1cblxuICBnZXRUZXJtaW5hbHMoYWlycG9ydDogQWlycG9ydCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYWlycG9ydC50ZXJtaW5hbHM7XG4gIH1cblxuICBmaWVsZEZyb21PYmplY3Q8VD4ob2JqOiBvYmplY3QsIGZpZWxkczogc3RyaW5nIHwgc3RyaW5nW10pOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KGZpZWxkcykgPyBmaWVsZHMgOiAoZmllbGRzIHx8ICcnKS5zcGxpdCgnLicpKS5yZWR1Y2UoXG4gICAgICAoY3VycmVudDogUmVjb3JkPHN0cmluZywgYW55PiwgZmllbGQxOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtmaWVsZDFdKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRbZmllbGQxXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG4gICAgICBvYmpcbiAgICApO1xuICB9XG5cbiAgbWFwRmllbGRGcm9tT2JqZWN0PEsgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIFQ+KGZpZWxkOiBLKSB7XG4gICAgcmV0dXJuIChvYmo6IFJlY29yZDxLLCBhbnk+KTogVCA9PiB7XG4gICAgICByZXR1cm4gb2JqW2ZpZWxkXTtcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlTnVsbHM8VD4ocXVlcnk6IFQpOiBUIHtcbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxuICAgIGlmIChtb21lbnQuaXNNb21lbnQocXVlcnkpKSB7XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5KSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKChxdWVyeSBhcyB1bmtub3duIGFzIEFycmF5PFVucGFja2VkPFQ+PilcbiAgICAgICAgICAubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZU51bGxzKGl0ZW0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigoaXRlbTE6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICEhaXRlbTE7XG4gICAgICAgICAgfSkgYXMgdW5rbm93biBhcyBUKSB8fCBudWxsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGFjY3VtOiBULCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoa2V5WzBdICE9PSAnXycpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IChxdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlbW92ZU51bGxzKHZhbHVlKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZGF0YSAhPT0gbnVsbCAmJiBkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gJ251bGwnKSB8fFxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgKGFjY3VtIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV0gPSBkYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LCB7fSBhcyBUKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cbiAgfVxuXG4gIGdldFRyYXZlbGxlcnNJZCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSwgYm9ib0lkPzogc3RyaW5nKTogUmVjZW50U2VhcmNoVHJhdmVsbGVyW10ge1xuICAgIGlmICh0cmF2ZWxsZXJzKSB7XG4gICAgICByZXR1cm4gdHJhdmVsbGVycy5yZWR1Y2UoXG4gICAgICAgIChwcmV2aW91c1ZhbHVlOiBSZWNlbnRTZWFyY2hUcmF2ZWxsZXJbXSwgY3VycmVudFZhbHVlOiBUcmF2ZWxsZXIsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGlkeCA9PT0gMFxuICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWQ6IGN1cnJlbnRWYWx1ZS5pZCxcbiAgICAgICAgICAgICAgICAgIGd1ZXN0OiBjdXJyZW50VmFsdWUuZ3Vlc3QsXG4gICAgICAgICAgICAgICAgICBpc0ludm9rZWQ6IGJvYm9JZCA9PT0gY3VycmVudFZhbHVlLmlkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAuLi5wcmV2aW91c1ZhbHVlLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlkOiBjdXJyZW50VmFsdWUuaWQsXG4gICAgICAgICAgICAgICAgICBndWVzdDogY3VycmVudFZhbHVlLmd1ZXN0LFxuICAgICAgICAgICAgICAgICAgaXNJbnZva2VkOiBib2JvSWQgPT09IGN1cnJlbnRWYWx1ZS5pZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGxvb3Agb3ZlciB0aGUgcXVlcnkgb2JqZWN0IHBhcmFtIGFuZCBjb252ZXJ0IGFueSBtb21lbnQgZGF0ZSBvYmplY3RzIHRvIGRhdGUtdGltZSBzdHJpbmdzXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gZGVidWdcbiAgICovXG4gIHNhbml0aXplTW9tZW50RGF0ZXMocXVlcnk6IGFueSwgZGVidWcgPSBmYWxzZSk6IGFueSB7XG4gICAgY29uc3Qgc2FuaXRpemVkUXVlcnkgPSB7IC4uLnF1ZXJ5IH07XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2FuaXRpemVkUXVlcnkpKSB7XG4gICAgICBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSkge1xuICAgICAgICBzYW5pdGl6ZWRRdWVyeVtrZXldID0gc2FuaXRpemVkUXVlcnlba2V5XS50b0lTT1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCctLSBzYW5pdGl6ZU1vbWVudERhdGVzKCkgY2FsbGVkIC0tJyk7XG4gICAgICBjb25zb2xlLmxvZygnb3JpZ2luYWwgcXVlcnk6ICcsIHF1ZXJ5KTtcbiAgICAgIGNvbnNvbGUubG9nKCdzYW5pdGl6ZWQgcXVlcnk6ICcsIHNhbml0aXplZFF1ZXJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIHNhbml0aXplZFF1ZXJ5O1xuICB9XG5cbiAgdG9TdHJpbmdzPFQ+KHRvRm9ybWF0OiBULCBzY2hlbWE6IFNjaGVtYSk6IFQge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzY2hlbWEucHJvcGVydGllcyB8fCB7fSkucmVkdWNlKFxuICAgICAgKGN1cnJlbnRWYWx1ZTogVCwgW2tleSwgdmFsdWVdOiBbc3RyaW5nLCBTY2hlbWFdKTogVCA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5fZm9ybWF0VmFsdWUoXG4gICAgICAgICAgdG9Gb3JtYXRba2V5IGFzIGtleW9mIFRdLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIChzY2hlbWEucmVxdWlyZWQgfHwgW10pLmluY2x1ZGVzKGtleSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobmV3VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBjdXJyZW50VmFsdWVba2V5IGFzIGtleW9mIFRdID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICB7fSBhcyBUXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Zvcm1hdFZhbHVlKHZhbHVlOiBhbnksIHNjaGVtYTogU2NoZW1hLCBpc1JlcXVpcmVkOiBib29sZWFuKTogYW55IHtcbiAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG4gICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgICAgY29uc3QgdG1wID0gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4odG1wKSA/IChpc1JlcXVpcmVkID8gMCA6IG51bGwpIDogdG1wO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgaWYgKChzY2hlbWEuZm9ybWF0ID09PSAnZGF0ZS10aW1lJyB8fCBzY2hlbWEuZm9ybWF0ID09PSAnZGF0ZScpICYmIHZhbHVlPy55ZWFyKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0SXNvRGF0ZSh0aGlzLm5nRGF0ZVRvTW9tZW50KHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG1wMSA9IHZhbHVlID8gdmFsdWUudG9TdHJpbmcoKSA6IG51bGw7XG4gICAgICAgIHJldHVybiB0bXAxICYmIHRtcDEubGVuZ3RoID4gMCA/IHRtcDEgOiBpc1JlcXVpcmVkID8gJycgOiBudWxsO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuIHZhbHVlID8gdGhpcy50b1N0cmluZ3ModmFsdWUsIHNjaGVtYSkgOiBpc1JlcXVpcmVkID8ge30gOiBudWxsO1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgICByZXR1cm4gdmFsdWU7IC8vIFRPRE8gd3JpdGUgYXJyYXkgdHJhbnNsYXRpb25cbiAgICAgIC8vIGNhc2UgJ2RhdGUnOlxuICAgICAgLy8gY2FzZSAnZGF0ZS10aW1lJzpcbiAgICAgIC8vICAgaWYgKHZhbHVlLnllYXIpIHtcbiAgICAgIC8vICAgICByZXR1cm4gdGhpcy5mb3JtYXRJc29EYXRlKHRoaXMubmdEYXRlVG9Nb21lbnQodmFsdWUpKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICBicmVhaztcbiAgICAgIC8vIGNhc2UgJ3Bhc3Nwb3J0JzpcbiAgICAgIC8vICAgcmV0dXJuIHZhbHVlID8gdGhpcy50b1N0cmluZ3ModmFsdWUsIHNjaGVtYSkgOiBpc1JlcXVpcmVkID8ge30gOiBudWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGArKysgdW5rbm93biBzY2hlbWEgdHlwZSAke3NjaGVtYS50eXBlfSB8IHJldHVybmluZyB2YWx1ZSBhcyBpcyArKytgKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG1ha2VUaW1lV2luZG93KGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gZGF0ZVRpbWUuY2xvbmUoKS5hZGQoc3RhcnQsICdob3VyJyk7XG4gICAgY29uc3QgZW5kVGltZSA9IGRhdGVUaW1lLmNsb25lKCkuYWRkKGVuZCwgJ2hvdXInKTtcblxuICAgIHJldHVybiB0aGlzLmZvcm1hdFRpbWUoc3RhcnRUaW1lKSArICctJyArIHRoaXMuZm9ybWF0VGltZShlbmRUaW1lKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZUR1cmF0aW9uSW5Ib3Vycyh0aW1lUmFuZ2U6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgcGFydHMgPSB0aW1lUmFuZ2Uuc3BsaXQoJy0nKTtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBwYXJ0c1swXTtcbiAgICBjb25zdCBlbmRUaW1lID0gcGFydHNbMV07XG5cbiAgICBjb25zdCBzdGFydEhvdXJzID0gcGFyc2VJbnQoc3RhcnRUaW1lLnN1YnN0cmluZygwLCAyKSwgMTApO1xuICAgIGNvbnN0IHN0YXJ0TWludXRlcyA9IHBhcnNlSW50KHN0YXJ0VGltZS5zdWJzdHJpbmcoMiwgNCksIDEwKTtcbiAgICBjb25zdCBlbmRIb3VycyA9IHBhcnNlSW50KGVuZFRpbWUuc3Vic3RyaW5nKDAsIDIpLCAxMCk7XG4gICAgY29uc3QgZW5kTWludXRlcyA9IHBhcnNlSW50KGVuZFRpbWUuc3Vic3RyaW5nKDIsIDQpLCAxMCk7XG5cbiAgICBsZXQgdG90YWxIb3VycyA9IDA7XG4gICAgbGV0IHRvdGFsTWludXRlcyA9IDA7XG5cbiAgICBpZiAoZW5kSG91cnMgPCBzdGFydEhvdXJzIHx8IChlbmRIb3VycyA9PT0gc3RhcnRIb3VycyAmJiBlbmRNaW51dGVzIDwgc3RhcnRNaW51dGVzKSkge1xuICAgICAgdG90YWxIb3VycyA9IDI0IC0gc3RhcnRIb3VycyArIGVuZEhvdXJzO1xuICAgICAgdG90YWxNaW51dGVzID0gNjAgLSBzdGFydE1pbnV0ZXMgKyBlbmRNaW51dGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3RhbEhvdXJzID0gZW5kSG91cnMgLSBzdGFydEhvdXJzO1xuICAgICAgdG90YWxNaW51dGVzID0gZW5kTWludXRlcyAtIHN0YXJ0TWludXRlcztcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRvdGFsIG1pbnV0ZXMgdG8gZnJhY3Rpb24gb2YgYW4gaG91clxuICAgIHRvdGFsSG91cnMgKz0gdG90YWxNaW51dGVzIC8gNjA7XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcih0b3RhbEhvdXJzIC8gMik7XG4gIH1cblxuICBpblJhbmdlKHRvY2hlY2s6IG51bWJlciwgcmFuZ2U6IE1pbk1heCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0b2NoZWNrID49IHJhbmdlLm1pbiAmJiB0b2NoZWNrIDw9IHJhbmdlLm1heDtcbiAgfVxuXG4gIG1ha2VVc2Vycyh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSk6IFVzZXJQYXNzZW5nZXJUeXBlSW5wdXRbXSB7XG4gICAgcmV0dXJuIHRyYXZlbGxlcnMubWFwKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IFVzZXJQYXNzZW5nZXJUeXBlSW5wdXQgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHRyYXZlbGxlci5pZCxcbiAgICAgICAgcGFzc2VuZ2VyVHlwZTogdHJhdmVsbGVyLmlzQ2hpbGRcbiAgICAgICAgICA/IFBhc3NlbmdlclR5cGUuQ2hpbGRcbiAgICAgICAgICA6IHRyYXZlbGxlci5pc0luZmFudFxuICAgICAgICAgID8gUGFzc2VuZ2VyVHlwZS5JbmZhbnRcbiAgICAgICAgICA6IFBhc3NlbmdlclR5cGUuQWR1bHRcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBtYWtlTW9tZW50RGF5VGltZShhZGREYXk/OiBudW1iZXIsIGhoPzogbnVtYmVyLCBtPzogbnVtYmVyKSB7XG4gICAgY29uc3QgZHQgPSBtb21lbnQoKTtcblxuICAgIGlmIChhZGREYXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZHQuYWRkKGFkZERheSwgJ2RheScpO1xuICAgIH1cblxuICAgIGlmIChoaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkdC5zZXQoJ2hvdXJzJywgaGgpO1xuICAgIH1cblxuICAgIGlmIChtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGR0LnNldCgnbWludXRlcycsIG0pO1xuICAgIH1cblxuICAgIHJldHVybiBkdDtcbiAgfVxuXG4gIHNhbmF0aXplUmV0dXJuczxUPihkZWZhdWx0czogVCwgc3VwcGxpZWREYXRhOiBQYXJ0aWFsPFQ+LCBtb21lbnRGaWVsZHM/OiAoa2V5b2YgVClbXSk6IFQge1xuICAgIGNvbnN0IGNvbWJpbmVkOiBUID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIHN1cHBsaWVkRGF0YSk7XG4gICAgcmV0dXJuIChtb21lbnRGaWVsZHMgfHwgW10pLnJlZHVjZSgoY3VycmVudDogVCwgbmV4dDoga2V5b2YgVCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSAoY3VycmVudCBhcyBhbnkpW25leHRdO1xuICAgICAgKGN1cnJlbnQgYXMgYW55KVtuZXh0XSA9ICF2YWx1ZVxuICAgICAgICA/IG1vbWVudCgpXG4gICAgICAgIDogdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICA/IG1vbWVudCh2YWx1ZSlcbiAgICAgICAgOiB2YWx1ZTtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0sIGNvbWJpbmVkKTtcbiAgfVxuXG4gIC8vIG1pSXNWYWxpZCh0b0NoZWNrOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSwgaXNBZ2VudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIC8vICAgcmV0dXJuIChcbiAgLy8gICAgIHRvQ2hlY2subGVuZ3RoID09PSAwIHx8XG4gIC8vICAgICAhIXRvQ2hlY2suZmluZCgobWlJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcbiAgLy8gICAgICAgcmV0dXJuIG1pSXRlbS5pc1ZhbGlkKCkgfHwgKG1pSXRlbS5hZ2VudE9ubHkgJiYgIWlzQWdlbnQpO1xuICAvLyAgICAgfSlcbiAgLy8gICApO1xuICAvLyB9XG5cbiAgLy8gY2hlY2tGb3JEZWZhdWx0TWlWYWx1ZShtaVBlcjogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10sIGlzSW52b2tlZDogYm9vbGVhbikge1xuICAvLyAgIHJldHVybiBtaVBlci5maW5kKG1pID0+XG4gIC8vICAgICAobWkuaGlkZVRha2VWYWx1ZUZyb21Vc2VyRGVmYXVsdCB8fCBtaS5oaWRlVGFrZVZhbHVlRnJvbUJvb2tlckRlZmF1bHQpICYmIGlzSW52b2tlZFxuICAvLyAgICAgICA/ICFtaS5pbnZva2VkVXNlckRlZmF1bHRWYWx1ZVxuICAvLyAgICAgICA6ICFtaS5kZWZhdWx0VmFsdWVcbiAgLy8gICApO1xuICAvLyB9XG5cbiAgLy8gY2hlY2tGb3JVc2VyRGVmYXVsdFZhbHVlKFxuICAvLyAgIHVzZXJNaVBlcjoge1xuICAvLyAgICAgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdO1xuICAvLyAgICAgc3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvPzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlO1xuICAvLyAgIH1bXSxcbiAgLy8gICBpc0ludm9rZWQ6IGJvb2xlYW5cbiAgLy8gKSB7XG4gIC8vICAgcmV0dXJuIHVzZXJNaVBlci5maW5kKHVzZXIgPT4gdGhpcy5jaGVja0ZvckRlZmF1bHRNaVZhbHVlKHVzZXIubWFuYWdlbWVudEluZm8sIGlzSW52b2tlZCkpO1xuICAvLyB9XG5cbiAgLy8gaXNNaVZhbGlkKFxuICAvLyAgIG1pUGVySXRlbTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10sXG4gIC8vICAgbWlQZXJVc2VyOiB7XG4gIC8vICAgICBba2V5OiBzdHJpbmddOiB7XG4gIC8vICAgICAgIG1hbmFnZW1lbnRJbmZvOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXTtcbiAgLy8gICAgIH07XG4gIC8vICAgfSxcbiAgLy8gICBtaVBlckd1ZXN0OiB7XG4gIC8vICAgICBba2V5OiBzdHJpbmddOiB7XG4gIC8vICAgICAgIG1hbmFnZW1lbnRJbmZvOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXTtcbiAgLy8gICAgIH07XG4gIC8vICAgfSxcbiAgLy8gICBpc0FnZW50OiBib29sZWFuXG4gIC8vICk6IGJvb2xlYW4ge1xuICAvLyAgIGNvbnN0IHVzZXJNaXMgPSBPYmplY3QudmFsdWVzKG1pUGVyVXNlciB8fCB7fSk7XG4gIC8vICAgY29uc3QgZ3Vlc3RNaXMgPSBPYmplY3QudmFsdWVzKG1pUGVyR3Vlc3QgfHwge30pO1xuICAvLyAgIHJldHVybiAoXG4gIC8vICAgICB0aGlzLm1pSXNWYWxpZChtaVBlckl0ZW0sIGlzQWdlbnQpICYmXG4gIC8vICAgICAodXNlck1pcy5sZW5ndGggPT09IDAgfHxcbiAgLy8gICAgICAgISF1c2VyTWlzLmZpbmQoKHVzZXJNaXMxOiB7IG1hbmFnZW1lbnRJbmZvOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSB9KSA9PiB7XG4gIC8vICAgICAgICAgcmV0dXJuIHRoaXMubWlJc1ZhbGlkKHVzZXJNaXMxLm1hbmFnZW1lbnRJbmZvLCBpc0FnZW50KTtcbiAgLy8gICAgICAgfSkpICYmXG4gIC8vICAgICAoZ3Vlc3RNaXMubGVuZ3RoID09PSAwIHx8XG4gIC8vICAgICAgICEhZ3Vlc3RNaXMuZmluZCgodXNlck1pczE6IHsgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdIH0pID0+IHtcbiAgLy8gICAgICAgICByZXR1cm4gdGhpcy5taUlzVmFsaWQodXNlck1pczEubWFuYWdlbWVudEluZm8sIGlzQWdlbnQpO1xuICAvLyAgICAgICB9KSlcbiAgLy8gICApO1xuICAvLyB9XG5cbiAgLy8gbmVlZHNNaShiYXNrZXQ6IEJhc2tldERldGFpbHMsIG5lZWRzVG9WaWV3TWk6IGJvb2xlYW4sIGlzQWdlbnQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgLy8gICByZXR1cm4gKFxuICAvLyAgICAgYmFza2V0LmJhc2tldEluZm9NaURldGFpbHMubGVuZ3RoID4gMCAmJlxuICAvLyAgICAgKG5lZWRzVG9WaWV3TWkgfHxcbiAgLy8gICAgICAgIWJhc2tldC5iYXNrZXRJbmZvTWlEZXRhaWxzLmZpbmQoKG1pRGV0YWlsOiBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm8pOiBib29sZWFuID0+IHtcbiAgLy8gICAgICAgICByZXR1cm4gdGhpcy5pc01pVmFsaWQoXG4gIC8vICAgICAgICAgICBtaURldGFpbC5taVBlckl0ZW0sXG4gIC8vICAgICAgICAgICBtaURldGFpbC5taVBlclVzZXIsXG4gIC8vICAgICAgICAgICBtaURldGFpbC5taVBlckd1ZXN0LFxuICAvLyAgICAgICAgICAgaXNBZ2VudFxuICAvLyAgICAgICAgICk7XG4gIC8vICAgICAgIH0pKVxuICAvLyAgICk7XG4gIC8vIH1cblxuICBmaW5kU2VydmljZShzZXJ2aWNlczogVXNlclNlcnZpY2VzLCBpZDogc3RyaW5nKTogU2VydmljZSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoc2VydmljZXMpLnJlZHVjZSgoY3VycmVudDogU2VydmljZSwgc2VydmljZTE6IFNlcnZpY2VbXSk6IFNlcnZpY2UgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY3VycmVudCB8fFxuICAgICAgICBzZXJ2aWNlMS5maW5kKChzZXJ2aWNlMjogU2VydmljZSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgIHJldHVybiBzZXJ2aWNlMi5pZCA9PT0gaWQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sIG51bGwgYXMgU2VydmljZSk7XG4gIH1cblxuICBhbGxUcnVlKFxuICAgIHN1cHBJbmZvOiBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2VbXSxcbiAgICBmaWx0ZXI6IChzdXBwSW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlKSA9PiBib29sZWFuXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBwSW5mby5maWx0ZXIoZmlsdGVyKS5sZW5ndGggPT09IHN1cHBJbmZvLmxlbmd0aDtcbiAgfVxuXG4gIGpvaW5Gcm9tQXR0cmlidXRlPFQ+KGpvaW5DaGFyYWN0ZXI6IHN0cmluZywgYXR0cmlidXRlOiBrZXlvZiBULCBhcnJheTogVFtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYXJyYXkubWFwKChpdGVtOiBUKSA9PiBpdGVtW2F0dHJpYnV0ZV0pLmpvaW4oam9pbkNoYXJhY3Rlcik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gc3BsaXQgdXAgYW4gYXJyYXkgaW50byBlcXVhbCBwYXJ0c1xuICAgKiBAcGFyYW0gYXJyYXkgLSB0aGUgYXJyYXkgdG8gc3BsaXQgdXBcbiAgICogQHBhcmFtIHNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgY29uc3RpdHVhbnQgcGFydHNcbiAgICogQHBhcmFtIGluY2x1ZGVSZW1haW5kZXIgLSB3ZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgYW55IHJlbWFpbmcgcmVzdWx0cyAtIGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgc3BsaXRVcEFycmF5KGFycmF5OiBhbnlbXSwgc2l6ZTogbnVtYmVyLCBpbmNsdWRlUmVtYWluZGVyOiBib29sZWFuID0gdHJ1ZSk6IGFueVtdIHtcbiAgICBjb25zdCBhcnJheUNvcHkgPSBfLmNsb25lRGVlcChhcnJheSk7IC8vIGxvZGFzaCBjbG9uZSBkZWVwXG4gICAgbGV0IG5ld0FycmF5ID0gW107XG5cbiAgICBpZiAoYXJyYXlDb3B5Lmxlbmd0aCA+IHNpemUpIHtcbiAgICAgIHdoaWxlIChhcnJheUNvcHkubGVuZ3RoID49IHNpemUpIHtcbiAgICAgICAgbmV3QXJyYXkucHVzaChhcnJheUNvcHkuc3BsaWNlKDAsIHNpemUpKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIGFueSByZW1haW5pbmdcbiAgICAgIGlmIChhcnJheUNvcHkubGVuZ3RoICYmIGluY2x1ZGVSZW1haW5kZXIpIHtcbiAgICAgICAgbmV3QXJyYXkucHVzaChhcnJheUNvcHkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdBcnJheSA9IGFycmF5Q29weTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3QXJyYXk7XG4gIH1cblxuICBATWVtb3Jpc2UoKVxuICBnZXRUaW1lRGlmZmVyZW5jZShkZXBEYXRlVGltZTogc3RyaW5nLCBhcnJEYXRlVGltZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbW9tZW50KGRlcERhdGVUaW1lKS5kaWZmKG1vbWVudChhcnJEYXRlVGltZSksICdtaW51dGVzJyk7XG4gIH1cblxuICBATWVtb3Jpc2UoKVxuICBkYXlEaWZmZXJlbmNlKGRlcHQ6IHN0cmluZywgYXJyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRpZmYgPSBtb21lbnQoYXJyKS5zdGFydE9mKCdkYXknKS5kaWZmKG1vbWVudChkZXB0KS5zdGFydE9mKCdkYXknKSwgJ2RheScpO1xuICAgIHJldHVybiBkaWZmID4gMCA/IGRpZmYudG9TdHJpbmcoKSA6ICcnO1xuICB9XG5cbiAgQE1lbW9yaXNlKClcbiAgbWFrZUZhcmVSdWxlcyhmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtLCBpc011bHRpQ2l0eSA9IGZhbHNlKSB7XG4gICAgY29uc3QgZmxpZ2h0cyA9XG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQgPyBmbGlnaHQub3V0Ym91bmRGbGlnaHRzIDogZmxpZ2h0LmluYm91bmRGbGlnaHRzO1xuICAgIGNvbnN0IHJ1bGVzID0gaXNNdWx0aUNpdHlcbiAgICAgID8gZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5mYXJlQ29uZGl0aW9uc1xuICAgICAgOiBmbGlnaHRzLnJlZHVjZShcbiAgICAgICAgICAoY3VycmVudDogRmFyZUNvbmRpdGlvbnMsIG5leHQ6IEZsaWdodEpvdXJuZXkpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQuY2FuY2VsbGF0aW9uID0gY3VycmVudC5jYW5jZWxsYXRpb24uY29uY2F0KFxuICAgICAgICAgICAgICBuZXh0LmZhcmVDb25kaXRpb25zPy5jYW5jZWxsYXRpb24gfHwgW11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjdXJyZW50LmNoYW5nZSA9IGN1cnJlbnQuY2hhbmdlLmNvbmNhdChuZXh0LmZhcmVDb25kaXRpb25zPy5jaGFuZ2UgfHwgW10pO1xuICAgICAgICAgICAgY3VycmVudC5ub1Nob3cgPSBjdXJyZW50Lm5vU2hvdy5jb25jYXQobmV4dC5mYXJlQ29uZGl0aW9ucz8ubm9TaG93IHx8IFtdKTtcbiAgICAgICAgICAgIGN1cnJlbnQudXBncmFkZSA9IGN1cnJlbnQudXBncmFkZS5jb25jYXQobmV4dC5mYXJlQ29uZGl0aW9ucz8udXBncmFkZSB8fCBbXSk7XG4gICAgICAgICAgICBjdXJyZW50Lm90aGVyID0gY3VycmVudC5vdGhlci5jb25jYXQobmV4dC5mYXJlQ29uZGl0aW9ucz8ub3RoZXIgfHwgW10pO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWxsYXRpb246IFtdLFxuICAgICAgICAgICAgY2hhbmdlOiBbXSxcbiAgICAgICAgICAgIG5vU2hvdzogW10sXG4gICAgICAgICAgICB1cGdyYWRlOiBbXSxcbiAgICAgICAgICAgIG90aGVyOiBbXVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICByZXR1cm4geyBydWxlcywgZmxpZ2h0cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjIC0gZ2VuZXJhdGVzIGljcyBmaWxlIGNvbnRlbnRcbiAgICovXG4gIGdlbmVyYXRlSWNzRmlsZUNvbnRlbnRzKGJhc2tldEl0ZW1zOiBCYXNrZXRJdGVtW10sIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljc0JvZHlDb250ZW50ID0gdGhpcy5nZW5lcmF0ZUljc0ZpbGVCb2R5Q29udGVudChiYXNrZXRJdGVtcywgaW5kZXgpO1xuICAgIHJldHVybiBbXG4gICAgICAnQkVHSU46VkNBTEVOREFSXFxyXFxuJyxcbiAgICAgICdQUk9ESUQ6LS8vTWljcm9zIFRyYXZlbC8vU0FCUyBDb3Jwb3JhdGUgLSBNTVhJSUkvL0VOXFxyXFxuJyxcbiAgICAgICdWRVJTSU9OOjIuMFxcclxcbicsXG4gICAgICAnTUVUSE9EOlJFUVVFU1RcXHJcXG4nLFxuICAgICAgaWNzQm9keUNvbnRlbnQsXG4gICAgICAnRU5EOlZDQUxFTkRBUlxcclxcbidcbiAgICBdLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjIC0gZ2VuZXJhdGVzIGljcyBmaWxlIGJvZHkgY29udGVudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYmFza2V0SXRlbXMgcGFyYW1cbiAgICovXG4gIGdlbmVyYXRlSWNzRmlsZUJvZHlDb250ZW50KGJhc2tldEl0ZW1zOiBCYXNrZXRJdGVtW10sIGJhc2tldEl0ZW1JbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBib2R5Q29udGVudDogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIGdlbmVyYXRlIGNhbGVuZGFyIGRhdGEgZm9yIGVhY2ggYmFza2V0IGl0ZW1cbiAgICBiYXNrZXRJdGVtcy5tYXAoKGJhc2tldEl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBkU3RhcnQ6ICcnLFxuICAgICAgICBkRW5kOiAnJyxcbiAgICAgICAgbG9jYXRpb25Gcm9tOiAnJyxcbiAgICAgICAgbG9jYXRpb25UbzogJycsXG4gICAgICAgIGJhc2tldElkOiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICBzZXJ2aWNlVHlwZTogJycsXG4gICAgICAgIHN1bW1hcnk6ICcnXG4gICAgICB9O1xuICAgICAgY29uc3QgcmV0dXJuRGF0YSA9IHtcbiAgICAgICAgZFN0YXJ0OiAnJyxcbiAgICAgICAgZEVuZDogJycsXG4gICAgICAgIGxvY2F0aW9uRnJvbTogJycsXG4gICAgICAgIGxvY2F0aW9uVG86ICcnLFxuICAgICAgICBiYXNrZXRJZDogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgc2VydmljZVR5cGU6ICcnLFxuICAgICAgICBzdW1tYXJ5OiAnJ1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSAnREQgTU1NTSBZWVlZIEhIOm1tJztcbiAgICAgIGNvbnN0IHsgdHlwZSB9ID0gYmFza2V0SXRlbS5zZXJ2aWNlO1xuICAgICAgY29uc3QgeyBhZHVsdHMsIGNoaWxkcmVuLCBib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZSwgZGV0YWlsLCBzZXJ2aWNlLCBwbnJMb2NhdG9yIH0gPVxuICAgICAgICBiYXNrZXRJdGVtO1xuICAgICAgLy8gcG9wdWxhdGUgZGF0YSBvYmplY3QgZGVwZW5kaW5nIG9uIHRoZSBzZXJ2aWNlIHR5cGUgaW4gdGhlIGJhc2tldFxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuTG91bmdlOlxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5hcnJpdmFsRGF0ZXRpbWU7XG4gICAgICAgICAgZGF0YS5kRW5kID0gJyc7XG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEFpcnBvcnQgTG91bmdlIC0gJHtkZXRhaWwubmFtZX1gO1xuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xuICAgICAgICAgICAgYExvdW5nZTogJHtkZXRhaWwubmFtZX1cXFxcbmAsXG4gICAgICAgICAgICBgU3RhcnRzOiAke21vbWVudChkZXRhaWwuYXJyaXZhbERhdGV0aW1lKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxcXG5gLFxuICAgICAgICAgICAgYEFkdWx0czogJHthZHVsdHN9XFxcXG5gLFxuICAgICAgICAgICAgYENoaWxkcmVuOiAke2NoaWxkcmVufVxcXFxuYCxcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXG4gICAgICAgICAgXS5qb2luKCcnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XG4gICAgICAgICAgY29uc3Qgb3V0QWRkcmVzcyA9IGAke2RldGFpbC5mcm9tTG9jYXRpb24uYnVpbGRpbmdOYW1lfSwgJHtkZXRhaWwuZnJvbUxvY2F0aW9uLnBvc3Rjb2RlfWA7XG4gICAgICAgICAgY29uc3QgdG9BZGRyZXNzID0gYCR7ZGV0YWlsLnRvTG9jYXRpb24uYnVpbGRpbmdOYW1lfSwgJHtkZXRhaWwudG9Mb2NhdGlvbi5wb3N0Y29kZX1gO1xuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gbW9tZW50KGRldGFpbD8uZGVwYXJ0cykudXRjKCkuZm9ybWF0KCdZWVlZLU1NLURELEhIOm1tOnNzJyk7XG4gICAgICAgICAgZGF0YS5kRW5kID0gbW9tZW50KGRldGFpbD8uZGVwYXJ0cykudXRjKCkuYWRkKCcxJywgJ2hvdXInKS5mb3JtYXQoJ1lZWVktTU0tREQsSEg6bW06c3MnKTtcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgVGF4aSBib29raW5nIC0gZnJvbSAke291dEFkZHJlc3N9IHRvICR7dG9BZGRyZXNzfWA7XG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcbiAgICAgICAgICAgIGBQaWNrdXAgUG9pbnQ6ICR7b3V0QWRkcmVzc31cXFxcbmAsXG4gICAgICAgICAgICBgVGltZTogJHttb21lbnQoZGV0YWlsLmRlcGFydHMpLnV0YygpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxuICAgICAgICAgIF0uam9pbignJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FyOlxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ucGlja1VwRGF0ZXRpbWU7XG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5kcm9wT2ZmRGF0ZXRpbWU7XG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYENhciBib29raW5nIC0gZnJvbSAke2RldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzfSB0byAke2RldGFpbC5kcm9wT2ZmTG9jYXRpb24uYWRkcmVzc31gO1xuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXG4gICAgICAgICAgICBgUGlja3VwIFBvaW50OiAke2RldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzfVxcXFxuYCxcbiAgICAgICAgICAgIGBUaW1lOiAke21vbWVudChkZXRhaWwucGlja1VwRGF0ZXRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgQXJyaXZhbCBQb2ludDogJHtkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLmFkZHJlc3N9XFxcXG5gLFxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcbiAgICAgICAgICBdLmpvaW4oJycpO1xuICAgICAgICAgIChkYXRhLmxvY2F0aW9uRnJvbSA9IGRldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzKSxcbiAgICAgICAgICAgIChkYXRhLmxvY2F0aW9uVG8gPSBkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLmFkZHJlc3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuRmFzdFRyYWNrOlxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkV1cm9zdGFyOlxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IG1vbWVudChkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgZGF0YS5kRW5kID0gbW9tZW50KFxuICAgICAgICAgICAgZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1tkZXRhaWwub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdLmRhdGVUaW1lQXJyaXZpbmdcbiAgICAgICAgICApLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgRmxpZ2h0IEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0fSB0byAke1xuICAgICAgICAgICAgZGV0YWlsPy5vdXRib3VuZEZsaWdodHNbZGV0YWlsLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnRcbiAgICAgICAgICB9YDtcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xuICAgICAgICAgICAgYEZyb206ICR7ZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0fVxcXFxuYCxcbiAgICAgICAgICAgIGBEZXBhcnQ6ICR7bW9tZW50KGRldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgVG86ICR7XG4gICAgICAgICAgICAgIGRldGFpbC5vdXRib3VuZEZsaWdodHNbZGV0YWlsLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnRcbiAgICAgICAgICAgIH1cXFxcbmAsXG4gICAgICAgICAgICBgQXJyaXZlOiAke21vbWVudChcbiAgICAgICAgICAgICAgZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1tkZXRhaWwub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdLmRhdGVUaW1lQXJyaXZpbmdcbiAgICAgICAgICAgICkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcXFxuYCxcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXG4gICAgICAgICAgXS5qb2luKCcnKTtcblxuICAgICAgICAgIGlmIChkZXRhaWw/LmluYm91bmRGbGlnaHRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuRGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XG4gICAgICAgICAgICByZXR1cm5EYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICByZXR1cm5EYXRhLmRTdGFydCA9IG1vbWVudChkZXRhaWwuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLmZvcm1hdChcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybkRhdGEuZEVuZCA9IG1vbWVudChcbiAgICAgICAgICAgICAgZGV0YWlsLmluYm91bmRGbGlnaHRzW2RldGFpbC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kYXRlVGltZUFycml2aW5nXG4gICAgICAgICAgICApLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybkRhdGEuc3VtbWFyeSA9IGBGbGlnaHQgQm9va2luZyAtIEZyb20gJHtcbiAgICAgICAgICAgICAgZGV0YWlsLmluYm91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnRcbiAgICAgICAgICAgIH0gdG8gJHtkZXRhaWw/LmluYm91bmRGbGlnaHRzW2RldGFpbC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnR9YDtcbiAgICAgICAgICAgIHJldHVybkRhdGEuZGVzY3JpcHRpb24gPSBbXG4gICAgICAgICAgICAgIGBGcm9tOiAke2RldGFpbC5pbmJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0fVxcXFxuYCxcbiAgICAgICAgICAgICAgYERlcGFydDogJHttb21lbnQoZGV0YWlsLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxcXG5gLFxuICAgICAgICAgICAgICBgVG86ICR7XG4gICAgICAgICAgICAgICAgZGV0YWlsLmluYm91bmRGbGlnaHRzW2RldGFpbC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnRcbiAgICAgICAgICAgICAgfVxcXFxuYCxcbiAgICAgICAgICAgICAgYEFycml2ZTogJHttb21lbnQoXG4gICAgICAgICAgICAgICAgZGV0YWlsLmluYm91bmRGbGlnaHRzW2RldGFpbC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kYXRlVGltZUFycml2aW5nXG4gICAgICAgICAgICAgICkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcXFxuYCxcbiAgICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcbiAgICAgICAgICAgIF0uam9pbignJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxuICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGJhc2tldEl0ZW0uZGV0YWlsLnJvb21zWzBdLmNoZWNrSW4uc3BsaXQoJ1QnKTtcbiAgICAgICAgICBzdGFydERhdGVbMV0gPSAnMTU6MDA6MDAuMDAwWic7XG4gICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IGJhc2tldEl0ZW0uZGV0YWlsLnJvb21zWzBdLmNoZWNrT3V0LnNwbGl0KCdUJyk7XG4gICAgICAgICAgZW5kRGF0ZVsxXSA9ICcxMTowMDowMC4wMDBaJztcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBzdGFydERhdGUuam9pbignVCcpOyAvLyB3ZSBoYXZlIHRoZXNlIGFzIG1pZG5pZ2h0IGhhcmRjb2RlZFxuICAgICAgICAgIGRhdGEuZEVuZCA9IGVuZERhdGUuam9pbignVCcpO1xuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBIb3RlbCBib29raW5nIC0gICR7ZGV0YWlsLmhvdGVsTmFtZX1gO1xuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXG4gICAgICAgICAgICBgSG90ZWw6ICR7ZGV0YWlsLmhvdGVsTmFtZX1cXFxcbmAsXG4gICAgICAgICAgICBgQXJyaXZhbDogJHttb21lbnQoc3RhcnREYXRlLmpvaW4oJ1QnKSkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcXFxuYCxcbiAgICAgICAgICAgIGBEZXBhcnR1cmU6ICR7bW9tZW50KGVuZERhdGUuam9pbignVCcpKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxcXG5gLFxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke3BuckxvY2F0b3J9YFxuICAgICAgICAgIF0uam9pbignJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWw6XG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZURhdGVUaW1lO1xuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XG4gICAgICAgICAgZGF0YS5sb2NhdGlvbkZyb20gPSBkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZTtcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uVG8gPSBkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYFRyYWluIEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9IHRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfWA7XG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcbiAgICAgICAgICAgIGBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9XFxcXG5gLFxuICAgICAgICAgICAgYFRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfVxcXFxuYCxcbiAgICAgICAgICAgIGBEZXBhcnR1cmUgJHttb21lbnQoZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgQXJyaXZhbCAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxuICAgICAgICAgIF0uam9pbignJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuUGFya2luZzpcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LmFycml2YWxEYXRldGltZTtcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/LmRlcGFydERhdGV0aW1lO1xuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBBaXJwb3J0IHBhcmtpbmcgLSAke2RldGFpbC5uYW1lfWA7XG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcbiAgICAgICAgICAgIGBBaXJwb3J0IFBhcmtpbmc6ICR7ZGV0YWlsLm5hbWV9XFxcXG5gLFxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcbiAgICAgICAgICBdLmpvaW4oJycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLlJhaWw6XG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZURhdGVUaW1lO1xuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XG4gICAgICAgICAgZGF0YS5sb2NhdGlvbkZyb20gPSBkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZTtcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uVG8gPSBkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYFRyYWluIEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9IHRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfWA7XG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcbiAgICAgICAgICAgIGBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9XFxcXG5gLFxuICAgICAgICAgICAgYFRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfVxcXFxuYCxcbiAgICAgICAgICAgIGBEZXBhcnR1cmUgJHttb21lbnQoZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgQXJyaXZhbCAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxuICAgICAgICAgIF0uam9pbignJyk7XG5cbiAgICAgICAgICBpZiAoZGV0YWlsPy5pbndhcmREZXRhaWwpIHtcbiAgICAgICAgICAgIHJldHVybkRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xuICAgICAgICAgICAgcmV0dXJuRGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuRGF0YS5kU3RhcnQgPSBkZXRhaWw/Lmlud2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZTtcbiAgICAgICAgICAgIHJldHVybkRhdGEuZEVuZCA9IGRldGFpbD8uaW53YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZTtcbiAgICAgICAgICAgIHJldHVybkRhdGEubG9jYXRpb25Gcm9tID0gZGV0YWlsLmlud2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZTtcbiAgICAgICAgICAgIHJldHVybkRhdGEubG9jYXRpb25UbyA9IGRldGFpbC5pbndhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xuICAgICAgICAgICAgcmV0dXJuRGF0YS5zdW1tYXJ5ID0gYFRyYWluIEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLmlud2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZX0gdG8gJHtkZXRhaWwuaW53YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1gO1xuICAgICAgICAgICAgcmV0dXJuRGF0YS5kZXNjcmlwdGlvbiA9IFtcbiAgICAgICAgICAgICAgYEZyb20gJHtkZXRhaWwuaW53YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfVxcXFxuYCxcbiAgICAgICAgICAgICAgYFRvICR7ZGV0YWlsLmlud2FyZERldGFpbC5hcnJpdmFsU3RhdGlvbk5hbWV9XFxcXG5gLFxuICAgICAgICAgICAgICBgRGVwYXJ0dXJlICR7bW9tZW50KGRldGFpbC5pbndhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXFxcbmAsXG4gICAgICAgICAgICAgIGBBcnJpdmFsICR7bW9tZW50KGRldGFpbC5pbndhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxcXG5gLFxuICAgICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7cG5yTG9jYXRvcn1gXG4gICAgICAgICAgICBdLmpvaW4oJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGxldCBhZGRpdGlvbmFsSW5kZXggPSAnJztcbiAgICAgIGlmIChiYXNrZXRJdGVtSW5kZXggPiAtMSkge1xuICAgICAgICBhZGRpdGlvbmFsSW5kZXggPSBgLiR7YmFza2V0SXRlbUluZGV4fWA7XG4gICAgICB9XG4gICAgICBib2R5Q29udGVudC5wdXNoKFxuICAgICAgICBbXG4gICAgICAgICAgJ0JFR0lOOlZFVkVOVFxcclxcbicsXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPyBgRFRTVEFSVDoke21vbWVudChkYXRhLmRTdGFydCkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKX1cXHJcXG5gIDogJycsXG4gICAgICAgICAgZGF0YS5kRW5kID8gYERURU5EOiR7bW9tZW50KGRhdGEuZEVuZCkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKX1cXHJcXG5gIDogJycsXG4gICAgICAgICAgJ09SR0FOSVpFUjtDTj1cIkRvIG5vdCByZXBseSB0byB0aGlzIGVtYWlsXCI6bWFpbHRvOmRvX25vdF9yZXBseUBzYWJzY29ycC5jb21cXHJcXG4nLFxuICAgICAgICAgIGRhdGEubG9jYXRpb25UbyAmJiBkYXRhLmxvY2F0aW9uRnJvbVxuICAgICAgICAgICAgPyBgTE9DQVRJT046ICR7ZGF0YS5sb2NhdGlvblRvfSB0byAke2RhdGEubG9jYXRpb25Gcm9tfSBcXHJcXG5gXG4gICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICdUUkFOU1A6T1BBUVVFXFxyXFxuJyxcbiAgICAgICAgICAnU0VRVUVOQ0U6MFxcclxcbicsXG4gICAgICAgICAgYFVJRDoke2RhdGEuc2VydmljZVR5cGV9XyR7aW5kZXh9JHthZGRpdGlvbmFsSW5kZXh9XyR7ZGF0YS5iYXNrZXRJZH1Ac2Fic2NvcnAuY29tXFxyXFxuYCxcbiAgICAgICAgICBgRFRTVEFNUDoke21vbWVudCgpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJyl9XFxyXFxuYCxcbiAgICAgICAgICBgREVTQ1JJUFRJT046JHtkYXRhLmRlc2NyaXB0aW9ufVxcclxcbmAsXG4gICAgICAgICAgYFNVTU1BUlk6JHtkYXRhLnN1bW1hcnl9XFxyXFxuYCxcbiAgICAgICAgICAnRU5EOlZFVkVOVFxcclxcbidcbiAgICAgICAgXS5qb2luKCcnKVxuICAgICAgKTtcblxuICAgICAgaWYgKHJldHVybkRhdGEuZFN0YXJ0KSB7XG4gICAgICAgIGJvZHlDb250ZW50LnB1c2goXG4gICAgICAgICAgW1xuICAgICAgICAgICAgJ0JFR0lOOlZFVkVOVFxcclxcbicsXG4gICAgICAgICAgICByZXR1cm5EYXRhLmRTdGFydFxuICAgICAgICAgICAgICA/IGBEVFNUQVJUOiR7bW9tZW50KHJldHVybkRhdGEuZFN0YXJ0KS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpfVxcclxcbmBcbiAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgIHJldHVybkRhdGEuZEVuZCA/IGBEVEVORDoke21vbWVudChyZXR1cm5EYXRhLmRFbmQpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJyl9XFxyXFxuYCA6ICcnLFxuICAgICAgICAgICAgJ09SR0FOSVpFUjtDTj1cIkRvIG5vdCByZXBseSB0byB0aGlzIGVtYWlsXCI6bWFpbHRvOmRvX25vdF9yZXBseUBzYWJzY29ycC5jb21cXHJcXG4nLFxuICAgICAgICAgICAgcmV0dXJuRGF0YS5sb2NhdGlvblRvICYmIHJldHVybkRhdGEubG9jYXRpb25Gcm9tXG4gICAgICAgICAgICAgID8gYExPQ0FUSU9OOiAke3JldHVybkRhdGEubG9jYXRpb25Ub30gdG8gJHtyZXR1cm5EYXRhLmxvY2F0aW9uRnJvbX0gXFxyXFxuYFxuICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgJ1RSQU5TUDpPUEFRVUVcXHJcXG4nLFxuICAgICAgICAgICAgJ1NFUVVFTkNFOjBcXHJcXG4nLFxuICAgICAgICAgICAgYFVJRDoke3JldHVybkRhdGEuc2VydmljZVR5cGV9XyR7aW5kZXh9LjVfJHtyZXR1cm5EYXRhLmJhc2tldElkfUBzYWJzY29ycC5jb21cXHJcXG5gLFxuICAgICAgICAgICAgYERUU1RBTVA6JHttb21lbnQoKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpfVxcclxcbmAsXG4gICAgICAgICAgICBgREVTQ1JJUFRJT046JHtyZXR1cm5EYXRhLmRlc2NyaXB0aW9ufVxcclxcbmAsXG4gICAgICAgICAgICBgU1VNTUFSWToke3JldHVybkRhdGEuc3VtbWFyeX1cXHJcXG5gLFxuICAgICAgICAgICAgJ0VORDpWRVZFTlRcXHJcXG4nXG4gICAgICAgICAgXS5qb2luKCcnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJvZHlDb250ZW50LmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjIC0gY3JlYXRlcyBhbiBlbGVtZW50IGluIG1lbW9yeSBhbmQgdHJpZ2dlcnMgY2xpY2sgZXZlbnQgdG8gZG93bmxvYWQgaWNzIGZpbGVcbiAgICovXG4gIGRvd25sb2FkSWNzKGZpbGVuYW1lOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsJyArIGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KSk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBzcGxpdCBhIHN0cmluZyBvbiBjYXBpdGFsc1xuICAgKiBAcGFyYW0gcmF3U3RyaW5nIC0gdGhlIHN0cmluZyB3ZSB3YW50IHRvIHNwbGl0XG4gICAqIEBwYXJhbSBqb2luIC0gd2hldGhlciBvciBub3QgdG8gam9pbmcgdGhlIHNwbGl0IGludG8gb25lIHN0cmluZywgc2VwZXJhdGVkIGJ5IGEgc3BhY2VcbiAgICogQHJldHVybnMgc3RyaW5nL3N0cmluZ1tdXG4gICAqL1xuICBzcGxpdFN0cmluZ09uQ2FwaXRhbHMocmF3U3RyaW5nOiBzdHJpbmcsIGpvaW46IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzcGxpdFN0cmluZyA9IHJhd1N0cmluZy5zcGxpdCgvKD89W0EtWl0pLyk7XG5cbiAgICBpZiAoam9pbikge1xuICAgICAgcmV0dXJuIHNwbGl0U3RyaW5nLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3BsaXRTdHJpbmc7XG4gIH1cblxuICBjcmVhdGVGbGlnaHRGaWx0ZXJzKFxuICAgIGpvdXJuZXlzOiBGbGlnaHRJdGluZXJhcnlbXSxcbiAgICBkZWZhdWx0RmlsdGVyczogRmxpZ2h0RmlsdGVycyxcbiAgICB2aWE/OiBhbnlcbiAgKTogRmxpZ2h0RmlsdGVycyB7XG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcbiAgICAgIChmaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzLCByZXN1bHQxOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyk6IEZsaWdodEZpbHRlcnMgPT4ge1xuICAgICAgICBjb25zdCBvdXRTdG9wcyA9IHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDE7XG4gICAgICAgIGZpbHRlcnMuc3RvcHNbb3V0U3RvcHNdID0gZmlsdGVycy5zdG9wc1tvdXRTdG9wc10gfHwge1xuICAgICAgICAgIGRpc3BsYXk6IG91dFN0b3BzID09PSAwID8gJ0RpcmVjdCcgOiBgJHtvdXRTdG9wc30gc3RvcGAgKyAob3V0U3RvcHMgIT09IDEgPyAncycgOiAnJyksXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiBvdXRTdG9wcyArIDFcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVxdWlyZXNSZWFzb24gPSByZXN1bHQxLnVuYXZhaWxhYmxlXG4gICAgICAgICAgPyBUcmF2ZWxQb2xpY2llcy5VTkFWQUlMQUJMRVxuICAgICAgICAgIDogcmVzdWx0MS5yZXF1aXJlc1JlYXNvbktleXM/Lmxlbmd0aFxuICAgICAgICAgID8gVHJhdmVsUG9saWNpZXMuQUxMT1dfV0lUSF9SRUFTT05cbiAgICAgICAgICA6IFRyYXZlbFBvbGljaWVzLklOX1BPTElDWTtcbiAgICAgICAgaWYgKHJlcXVpcmVzUmVhc29uICE9PSAnVW5hdmFpbGFibGUnKSB7XG4gICAgICAgICAgZmlsdGVycy50cmF2ZWxQb2xpY3lbcmVxdWlyZXNSZWFzb25dID0gZmlsdGVycy50cmF2ZWxQb2xpY3lbcmVxdWlyZXNSZWFzb25dIHx8IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IHJlcXVpcmVzUmVhc29uLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHJlcXVpcmVzUmVhc29uXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpblN0b3BzID0gcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyA/IHJlc3VsdDEuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICAgIGNvbnN0IHRvdGFsU3RvcHMgPSBpblN0b3BzID4gb3V0U3RvcHMgPyBpblN0b3BzIDogb3V0U3RvcHM7XG4gICAgICAgIGZpbHRlcnMudG90YWxTdG9wc1t0b3RhbFN0b3BzXSA9IGZpbHRlcnMudG90YWxTdG9wc1t0b3RhbFN0b3BzXSB8fCB7XG4gICAgICAgICAgZGlzcGxheTpcbiAgICAgICAgICAgIHRvdGFsU3RvcHMgPT09IDAgPyAnRGlyZWN0JyA6IGAke3RvdGFsU3RvcHN9IHN0b3BgICsgKHRvdGFsU3RvcHMgIT09IDEgPyAncycgOiAnJyksXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiB0b3RhbFN0b3BzICsgMVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHVwZGF0ZUZsaWdodEl0ZW1zID0gKGZsaWdodDogRmxpZ2h0Sm91cm5leSk6IHZvaWQgPT4ge1xuICAgICAgICAgIGZpbHRlcnMuY2xhc3Nlc1tmbGlnaHQuY2FiaW5DbGFzc10gPSBmaWx0ZXJzLmNsYXNzZXNbZmxpZ2h0LmNhYmluQ2xhc3NdIHx8IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsaWdodC5jYWJpbkNsYXNzLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IGZsaWdodC5jYWJpbkNsYXNzXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBmaWx0ZXJzLmFpcmxpbmVzW2ZsaWdodC5tYXJrZXRpbmdDYXJyaWVyXSA9IGZpbHRlcnMuYWlybGluZXNbZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJdIHx8IHtcbiAgICAgICAgICAvLyAgIGRpc3BsYXk6IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyTmFtZSxcbiAgICAgICAgICAvLyAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAvLyAgIHZhbHVlOiBmbGlnaHQubWFya2V0aW5nQ2FycmllclxuICAgICAgICAgIC8vIH07XG4gICAgICAgICAgaWYgKGZsaWdodC5mYXJlSW5mby50eXBlID09PSAnUHJpdmF0ZScpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHJpdmF0ZUZhcmVzW2ZsaWdodC5mYXJlSW5mby50aXRsZV0gPSBmaWx0ZXJzLnByaXZhdGVGYXJlc1tcbiAgICAgICAgICAgICAgZmxpZ2h0LmZhcmVJbmZvLnRpdGxlXG4gICAgICAgICAgICBdIHx8IHtcbiAgICAgICAgICAgICAgZGlzcGxheTogZmxpZ2h0LmZhcmVJbmZvLnRpdGxlID09PSBcIkNvcnBvcmF0ZSBGYXJlXCIgPyBcIkNsaWVudFwiIDogZmxpZ2h0LmZhcmVJbmZvLnRpdGxlLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgIHZhbHVlOiBmbGlnaHQuZmFyZUluZm8udGl0bGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGdldEFpcmxpbmUgPSAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5KTogdm9pZCA9PiB7XG4gICAgICAgICAgZmlsdGVycy5haXJsaW5lc1tmbGlnaHQubWFya2V0aW5nQ2Fycmllcl0gPSBmaWx0ZXJzLmFpcmxpbmVzW2ZsaWdodC5tYXJrZXRpbmdDYXJyaWVyXSB8fCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGlnaHQubWFya2V0aW5nQ2Fycmllck5hbWUsXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggJiYgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBjb21tb25NYXJrZXRpbmdDYXJyaWVyczogRmxpZ2h0Sm91cm5leVtdID0gcmVzdWx0MS5vdXRib3VuZEZsaWdodHMuZmlsdGVyKFxuICAgICAgICAgICAgb3V0Ym91bmRGbGlnaHQgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cy5zb21lKGluYm91bmRGbGlnaHQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmJvdW5kRmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXIgPT09IG91dGJvdW5kRmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXI7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29tbW9uTWFya2V0aW5nQ2FycmllcnMuZm9yRWFjaChnZXRBaXJsaW5lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5mb3JFYWNoKGdldEFpcmxpbmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCh1cGRhdGVGbGlnaHRJdGVtcyk7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSByZXN1bHQxLmJhZ2dhZ2VBbGxvd2FuY2VcbiAgICAgICAgICA/LmZpbHRlcihhID0+IGE/LnR5cGUgPT09ICdDaGVja0luJylcbiAgICAgICAgICAubWFwKGEgPT4gYT8ucXR5KSBhcyBudW1iZXJbXTtcbiAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gYmFnZ2FnZUFycmF5Lmxlbmd0aCA/IE1hdGgubWluKC4uLmJhZ2dhZ2VBcnJheSkgOiAwO1xuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2VbYmFnZ2FnZV0gPSBmaWx0ZXJzLmJhZ2dhZ2VbYmFnZ2FnZV0gfHwge1xuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICBkaXNwbGF5OiBgJHtiYWdnYWdlfSBiYWcke2JhZ2dhZ2UgPiAxID8gJ3MnIDogJyd9YCxcbiAgICAgICAgICB2YWx1ZTogYmFnZ2FnZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbmRleGVkRmxpZ2h0ID0gKFxuICAgICAgICAgIGZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcbiAgICAgICAgICBmaWx0ZXJBdHRyaWJ1dGU6IEZsaWdodEZpbHRlcnNSZWNvcmRLZXlzLFxuICAgICAgICAgIGZsaWdodEF0dHJpYnV0ZToga2V5b2YgRmxpZ2h0Sm91cm5leSxcbiAgICAgICAgICBmbGlnaHRBdHRyaWJ1dGVOYW1lOiBrZXlvZiBGbGlnaHRKb3VybmV5LFxuICAgICAgICAgIGluZGV4OiBudW1iZXJcbiAgICAgICAgKTogdm9pZCA9PiB7XG4gICAgICAgICAgY29uc3QgdGVtcDogc3RyaW5nID1cbiAgICAgICAgICAgIGZsaWdodHMgJiYgZmxpZ2h0c1tpbmRleF0gPyBmbGlnaHRzW2luZGV4XVtmbGlnaHRBdHRyaWJ1dGVdIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGlmICh0ZW1wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnNbZmlsdGVyQXR0cmlidXRlXVt0ZW1wXSA9IGZpbHRlcnNbZmlsdGVyQXR0cmlidXRlXVt0ZW1wXSB8fCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBmbGlnaHRzW2luZGV4XVtmbGlnaHRBdHRyaWJ1dGVdLFxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGlnaHRzW2luZGV4XVtmbGlnaHRBdHRyaWJ1dGVOYW1lXSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaW5kZXhlZEZsaWdodChcbiAgICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICAgJ3ZpYXMnLFxuICAgICAgICAgICAgJ29yaWdpbkFpcnBvcnQnLFxuICAgICAgICAgICAgJ29yaWdpbkFpcnBvcnROYW1lJyxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxOyBpbmRleCsrKSB7XG4gICAgICAgICAgaW5kZXhlZEZsaWdodChcbiAgICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICAgJ3ZpYXMnLFxuICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydCcsXG4gICAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0TmFtZScsXG4gICAgICAgICAgICBpbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRleGVkRmxpZ2h0KFxuICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICdkZXBhdHVyZUFpcnBvcnQnLFxuICAgICAgICAgICdvcmlnaW5BaXJwb3J0JyxcbiAgICAgICAgICAnb3JpZ2luQWlycG9ydE5hbWUnLFxuICAgICAgICAgIDBcbiAgICAgICAgKTtcbiAgICAgICAgaW5kZXhlZEZsaWdodChcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAnYXJyaXZhbEFpcnBvcnQnLFxuICAgICAgICAgICdkZXN0aW5hdGlvbkFpcnBvcnQnLFxuICAgICAgICAgICdkZXN0aW5hdGlvbkFpcnBvcnROYW1lJyxcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXG4gICAgICAgICk7XG5cbiAgICAgICAgZmlsdGVycy5wcmljZS5taW4gPVxuICAgICAgICAgIGZpbHRlcnMucHJpY2UubWluIDwgcmVzdWx0MS50b3RhbC5wcmljZSA/IGZpbHRlcnMucHJpY2UubWluIDogcmVzdWx0MS50b3RhbC5wcmljZTtcblxuICAgICAgICBmaWx0ZXJzLnByaWNlLm1heCA9XG4gICAgICAgICAgZmlsdGVycy5wcmljZS5tYXggPiByZXN1bHQxLnRvdGFsLnByaWNlID8gZmlsdGVycy5wcmljZS5tYXggOiByZXN1bHQxLnRvdGFsLnByaWNlO1xuXG4gICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWluID1cbiAgICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1pbiA8IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uXG4gICAgICAgICAgICA/IGZpbHRlcnMuZHVyYXRpb24ubWluXG4gICAgICAgICAgICA6IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uO1xuXG4gICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWF4ID1cbiAgICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1heCA+IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uXG4gICAgICAgICAgICA/IGZpbHRlcnMuZHVyYXRpb24ubWF4XG4gICAgICAgICAgICA6IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uO1xuXG4gICAgICAgIGNvbnN0IGRlcGFydFRpbWUgPSByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGhcbiAgICAgICAgICA/IG1vbWVudChyZXN1bHQxLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykuZ2V0KCdob3VyJylcbiAgICAgICAgICA6IDA7XG5cbiAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1pbiA9XG4gICAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1pbiA8IGRlcGFydFRpbWUgPyBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWluIDogZGVwYXJ0VGltZTtcbiAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1heCA9XG4gICAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1heCA+IGRlcGFydFRpbWUgPyBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWF4IDogZGVwYXJ0VGltZTtcblxuICAgICAgICBjb25zdCBhcnJpdmFsVGltZSA9IHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aFxuICAgICAgICAgID8gbW9tZW50KFxuICAgICAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0c1tyZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kYXRlVGltZUFycml2aW5nXG4gICAgICAgICAgICApLmdldCgnaG91cicpXG4gICAgICAgICAgOiAwO1xuXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWluID1cbiAgICAgICAgICBmaWx0ZXJzLmFycml2YWxUaW1lLm1pbiA8IGFycml2YWxUaW1lID8gZmlsdGVycy5hcnJpdmFsVGltZS5taW4gOiBhcnJpdmFsVGltZTtcbiAgICAgICAgZmlsdGVycy5hcnJpdmFsVGltZS5tYXggPVxuICAgICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4ID4gYXJyaXZhbFRpbWUgPyBmaWx0ZXJzLmFycml2YWxUaW1lLm1heCA6IGFycml2YWxUaW1lO1xuXG4gICAgICAgIGlmIChyZXN1bHQxLmluYm91bmRGbGlnaHRzICYmIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWluID1cbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWluIDwgcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvblxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWluXG4gICAgICAgICAgICAgIDogcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvbjtcblxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWF4ID1cbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWF4ID4gcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvblxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWF4XG4gICAgICAgICAgICAgIDogcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvbjtcblxuICAgICAgICAgIGNvbnN0IGRlcGFydFRpbWVSZXR1cm4gPVxuICAgICAgICAgICAgcmVzdWx0MSAmJiByZXN1bHQxLmluYm91bmRGbGlnaHRzICYmIHJlc3VsdDEuaW5ib3VuZEZsaWdodHNbMF1cbiAgICAgICAgICAgICAgPyBtb21lbnQocmVzdWx0MS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykuZ2V0KCdob3VyJylcbiAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5taW4gPVxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1pbiA8IGRlcGFydFRpbWVSZXR1cm5cbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWluXG4gICAgICAgICAgICAgIDogZGVwYXJ0VGltZVJldHVybjtcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWF4ID1cbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5tYXggPiBkZXBhcnRUaW1lUmV0dXJuXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1heFxuICAgICAgICAgICAgICA6IGRlcGFydFRpbWVSZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBhcnJpdmFsVGltZVJldHVybiA9IHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aFxuICAgICAgICAgICAgPyBtb21lbnQoXG4gICAgICAgICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHNbcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV0uZGF0ZVRpbWVBcnJpdmluZ1xuICAgICAgICAgICAgICApLmdldCgnaG91cicpXG4gICAgICAgICAgICA6IDA7XG5cbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1pbiA9XG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1pbiA8IGFycml2YWxUaW1lUmV0dXJuXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5taW5cbiAgICAgICAgICAgICAgOiBhcnJpdmFsVGltZVJldHVybjtcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1heCA9XG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1heCA+IGFycml2YWxUaW1lUmV0dXJuXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXhcbiAgICAgICAgICAgICAgOiBhcnJpdmFsVGltZVJldHVybjtcblxuICAgICAgICAgIChyZXN1bHQxLmluYm91bmRGbGlnaHRzIHx8IFtdKS5mb3JFYWNoKHVwZGF0ZUZsaWdodEl0ZW1zKTtcblxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgaW5kZXhlZEZsaWdodChcbiAgICAgICAgICAgICAgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgICAgJ3ZpYXMnLFxuICAgICAgICAgICAgICAnb3JpZ2luQWlycG9ydCcsXG4gICAgICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aCAtIDE7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGluZGV4ZWRGbGlnaHQoXG4gICAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMsXG4gICAgICAgICAgICAgICd2aWFzJyxcbiAgICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydCcsXG4gICAgICAgICAgICAgICdkZXN0aW5hdGlvbkFpcnBvcnROYW1lJyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5kZXhlZEZsaWdodChcbiAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMsXG4gICAgICAgICAgICAnZGVwYXR1cmVSZXR1cm5BaXJwb3J0JyxcbiAgICAgICAgICAgICdvcmlnaW5BaXJwb3J0JyxcbiAgICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpbmRleGVkRmxpZ2h0KFxuICAgICAgICAgICAgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgICdhcnJpdmFsUmV0dXJuQWlycG9ydCcsXG4gICAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0JyxcbiAgICAgICAgICAgICdkZXN0aW5hdGlvbkFpcnBvcnROYW1lJyxcbiAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBhIHZpYSBpcyBzZWxlY3RlZCBpbiB0aGUgc2VhcmNoIGFuZCB0aGlzIHN0b3AgZXhpc3RzLCB0aGVuIHdlIG1hcmsgaXQgYXMgc2VsZWN0ZWQgYW5kIGxlYXZlIG9ubHkgaXQgaW4gdGhlIGxpc3QuXG4gICAgICAgIC8vIGlmIHRoaXMgc3RvcCBkb2VzIG5vdCBhcHBlYXIgYW1vbmcgYWxsIHRoZSByZXN1bHRzLCB0aGVuIHdlIHNob3cgYWxsIHRoZSBzdG9wcy5cbiAgICAgICAgaWYgKHZpYSkge1xuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGZpbHRlcnMudmlhcykge1xuICAgICAgICAgICAgaWYgKHZpYSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgIGZpbHRlcnMudmlhc1trZXldLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFZpYXMgPSBPYmplY3Qua2V5cyhmaWx0ZXJzLnZpYXMpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoa2V5OiBzdHJpbmcpID0+IHZpYS5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKG9iajogUmVjb3JkPHN0cmluZywgU2VsZWN0RmlsdGVyPiwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IGZpbHRlcnMudmlhc1trZXldO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICAgIGZpbHRlcnMudmlhcyA9IGZpbHRlcmVkVmlhcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICAgIH0sXG4gICAgICB0aGlzLmNsb25lKGRlZmF1bHRGaWx0ZXJzKVxuICAgICk7XG4gIH1cblxuICBtYXBPdmVyT2JqZWN0PFY+KFxuICAgIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPixcbiAgICBjYWxsYmFjazogKHZhbHVlOiBWLCBrZXk/OiBzdHJpbmcgfCBudW1iZXIpID0+IFZcbiAgKTogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj4ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpdGVtcykucmVkdWNlKFxuICAgICAgKGFjY3VtOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPiwgZW50cmllczogW3N0cmluZyB8IG51bWJlciwgVl0pID0+IHtcbiAgICAgICAgYWNjdW1bZW50cmllc1swXV0gPSBjYWxsYmFjayhlbnRyaWVzWzFdLCBlbnRyaWVzWzBdKTtcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+XG4gICAgKTtcbiAgfVxuXG4gIG5vcm1hbGlzZU1pbnV0ZVRvQmFzZTEwKG1pbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgobWluICogMTAwKSAvIDYwKTtcbiAgfVxuXG4gIE9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3ModmFsdWU6IE9CVEZsaWdodENhYmluQ2xhc3MpOiBNYWluRmxpZ2h0Q2FiaW5DbGFzcyB7XG4gICAgY29uc3QgT0JURmxpZ2h0Q2FiaW5DbGFzc1RvRmxpZ2h0Q2FiaW5DbGFzczogUmVjb3JkPE9CVEZsaWdodENhYmluQ2xhc3MsIE1haW5GbGlnaHRDYWJpbkNsYXNzPiA9XG4gICAgICB7XG4gICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcbiAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcbiAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpXTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGksXG4gICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aUJyYW5kZWRdOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aSxcbiAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc106IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFncyxcbiAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc0JyYW5kZWRdOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3MsXG4gICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcbiAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcbiAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RdOiBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0LFxuICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWRdOiBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0LFxuICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06IEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXksXG4gICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZF06IEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXlcbiAgICAgIH07XG4gICAgcmV0dXJuIE9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3NbdmFsdWVdO1xuICB9XG4gIEZsaWdodENhYmluQ2xhc3NUb0JyYW5kZWRPQlRGbGlnaHRDYWJpbkNsYXNzKFxuICAgIHZhbHVlOiBGbGlnaHRHcm91cHMsXG4gICAgaXNCcmFuZGVkOiBib29sZWFuXG4gICk6IE9CVEZsaWdodENhYmluQ2xhc3Mge1xuICAgIGNvbnN0IHR5cGVzOiBSZWNvcmQ8RmxpZ2h0R3JvdXBzLCBPQlRGbGlnaHRDYWJpbkNsYXNzPiA9IGlzQnJhbmRlZFxuICAgICAgPyB7XG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZCxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtQnVzaW5lc3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzQnJhbmRlZCxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5MaXRlRWNvbm9teV06IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkLFxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZCxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRmlyc3RdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0QnJhbmRlZCxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZF06IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkLFxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpQnJhbmRlZCxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzQnJhbmRlZCxcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc106IE9CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkLFxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWRcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215LFxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1CdXNpbmVzc106IE9CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuTGl0ZUVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkLFxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkLFxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3QsXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkLFxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpLFxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3MsXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzLFxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdFxuICAgICAgICB9O1xuICAgIHJldHVybiB0eXBlc1t2YWx1ZV07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gY29udmVydCBmcm9tIG1ldHJlcyB0byBtaWxlc1xuICAgKiBAcGFyYW0gbWV0cmVzIC0gdGhlIGFtb3VudCBvZiBtZXRyZXMgdG8gY29udmVydFxuICAgKiBAcGFyYW0gZGVjaW1hbFBsYWNlcyAtIHRoZSBhbW91bnQgb2YgZC5wIHRvIGNvbnZlcnQgdG8sIGlmIG5lZ2F0aXZlIChkZWZhdWx0KSBkb2VzIG5vdCByZXN0cmljdCB0aGUgZGVjaW1hbCBwbGFjZXNcbiAgICovXG4gIGNvbnZlcnRNZXRyZXNUb01pbGVzKG1ldHJlczogbnVtYmVyLCBkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAtMSk6IG51bWJlciB7XG4gICAgY29uc3QgbWlsZXMgPSBtZXRyZXMgLyBNRVRSRVNfVE9fTUlMRVNfQ09OVkVSU0lPTjtcblxuICAgIGlmIChkZWNpbWFsUGxhY2VzID49IDApIHtcbiAgICAgIHJldHVybiBOdW1iZXIobWlsZXMudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNvbnZlcnQgc2Vjb25kcyB0byBob3Vyc1xuICAgKiBAcGFyYW0gc2Vjb25kcyAtIHRvIGNvbnZlcnRcbiAgICogQHBhcmFtIGRlY2ltYWxQbGFjZXMgLSB0aGUgYW1vdW50IG9mIGQucCB0byBjb252ZXJ0IHRvLCBpZiBuZWdhdGl2ZSAoZGVmYXVsdCkgZG9lcyBub3QgcmVzdHJpY3QgdGhlIGRlY2ltYWwgcGxhY2VzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBjb252ZXJ0U2Vjb25kc1RvSG91cnMoc2Vjb25kczogbnVtYmVyLCBkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAtMSk6IG51bWJlciB7XG4gICAgY29uc3QgaG91cnMgPSBzZWNvbmRzIC8gVElNRV9CQVNFIC8gVElNRV9CQVNFO1xuXG4gICAgaWYgKGRlY2ltYWxQbGFjZXMgPj0gMCkge1xuICAgICAgcmV0dXJuIE51bWJlcihob3Vycy50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaG91cnM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gY29udmVydCBzZWNvbmRzIHRvIG1pbnNcbiAgICogQHBhcmFtIHNlY29uZHMgLSB0byBjb252ZXJ0XG4gICAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzIC0gdGhlIGFtb3VudCBvZiBkLnAgdG8gY29udmVydCB0bywgaWYgbmVnYXRpdmUgKGRlZmF1bHQpIGRvZXMgbm90IHJlc3RyaWN0IHRoZSBkZWNpbWFsIHBsYWNlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgY29udmVydFNlY29uZHNUb01pbnMoc2Vjb25kczogbnVtYmVyLCBkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAtMSk6IG51bWJlciB7XG4gICAgY29uc3QgaG91cnMgPSBzZWNvbmRzIC8gVElNRV9CQVNFO1xuXG4gICAgaWYgKGRlY2ltYWxQbGFjZXMgPj0gMCkge1xuICAgICAgcmV0dXJuIE51bWJlcihob3Vycy50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaG91cnM7XG4gIH1cblxuICBhZGRSYWlsQWN0aW9uUnVsZXMoZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLCBydWxlczogUnVsZXNbXSk6IE9CVFJhaWxKb3VybmV5RmFyZSB7XG4gICAgcmV0dXJuIHJ1bGVzLnJlZHVjZSgoZmFyZTE6IE9CVFJhaWxKb3VybmV5RmFyZSwgcnVsZTogUnVsZXMpID0+IHtcbiAgICAgIGlmIChpc1NldChydWxlPy5yZW1vdmVSZXN1bHQpKSB7XG4gICAgICAgICBmYXJlMS5yZW1vdmVSZXN1bHQgPSB0cnVlXG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChpc1NldChydWxlPy51bmF2YWlsYWJsZSkpIHtcbiAgICAgICAgZmFyZTEudW5hdmFpbGFibGUgPSBydWxlLnVuYXZhaWxhYmxlIGFzIGJvb2xlYW47XG4gICAgICAgIGZhcmUxLnVuYXZhaWxhYmxlTWVzc2FnZSA9IHJ1bGUudW5hdmFpbGFibGVNZXNzYWdlIGFzIHN0cmluZztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU2V0KHJ1bGU/LnRtY1ByZWZlcnJlZCkpIHtcbiAgICAgICAgZmFyZTEudG1jUHJlZmVycmVkID0gcnVsZS50bWNQcmVmZXJyZWQgYXMgYm9vbGVhbjtcbiAgICAgICAgZmFyZTEudG1jUHJlZmVycmVkTWVzc2FnZSA9IHJ1bGUudG1jUHJlZmVycmVkTWVzc2FnZSBhcyBzdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1NldChydWxlPy5jb21wYW55UHJlZmVycmVkKSkge1xuICAgICAgICBmYXJlMS5jb21wYW55UHJlZmVycmVkID0gcnVsZS5jb21wYW55UHJlZmVycmVkIGFzIGJvb2xlYW47XG4gICAgICAgIGZhcmUxLmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlID0gcnVsZS5jb21wYW55UHJlZmVycmVkTWVzc2FnZSBhcyBzdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1NldChydWxlPy5vZmZpY2VQcmVmZXJyZWQpKSB7XG4gICAgICAgIGZhcmUxLm9mZmljZVByZWZlcnJlZCA9IHJ1bGUub2ZmaWNlUHJlZmVycmVkIGFzIGJvb2xlYW47XG4gICAgICAgIGZhcmUxLm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgPSBydWxlLm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgYXMgc3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTZXQocnVsZT8udG1jUHJlZmVycmVkTG9nb1VybCkpIHtcbiAgICAgICAgZmFyZTEudG1jUHJlZmVycmVkTG9nb1VybCA9IHJ1bGUudG1jUHJlZmVycmVkTG9nb1VybCBhcyBzdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1NldChydWxlPy5yZXF1aXJlc1JlYXNvbktleXMpKSB7XG4gICAgICAgIGZhcmUxLnJlcXVpcmVzUmVhc29uS2V5cyA9IHJ1bGUucmVxdWlyZXNSZWFzb25LZXlzO1xuICAgICAgICBmYXJlMS5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzID0gcnVsZS5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhcmUxO1xuICAgIH0sIGZhcmUpO1xuICB9XG5cbiAgbWFwPFQ+KG9iajogUmVjb3JkPHN0cmluZywgVD4sIGZ1bmM6IChuZXh0OiBUKSA9PiBUKTogUmVjb3JkPHN0cmluZywgVD4ge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICAuLi5PYmplY3QuZW50cmllcyhvYmopLm1hcCgoW2tleSwgdmFsdWVdOiBbc3RyaW5nLCBUXSk6IFJlY29yZDxzdHJpbmcsIFQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBba2V5XTogZnVuYyh2YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG1lcmdlT2JqZWN0czxUPiguLi5vYmpzOiBUW10pOiBUIHtcbiAgICByZXR1cm4gb2Jqcy5yZWR1Y2UoKGN1cnJlbnQ6IFQsIG5leHQ6IFQpID0+IHtcbiAgICAgIHJldHVybiBfLm1lcmdlKGN1cnJlbnQsIG5leHQpIGFzIFQ7XG4gICAgfSwge30gYXMgVCk7XG4gIH1cblxuICBpbnRlcmNlcHRNZXRob2RDYWxsczxUIGV4dGVuZHMgb2JqZWN0PihcbiAgICBvYmo6IFQsXG4gICAgZm46IChwcm9wOiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIGFyZzogYW55W10pID0+IGFueVxuICApOiBUIHtcbiAgICByZXR1cm4gbmV3IFByb3h5KG9iaiwge1xuICAgICAgZ2V0KHRhcmdldDogYW55LCBwcm9wOiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXRbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3h5KHRhcmdldFtwcm9wXSwge1xuICAgICAgICAgICAgYXBwbHk6ICh0YXJnZXQxLCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KSA9PiB7XG4gICAgICAgICAgICAgIGZuKHByb3AsIGFyZ3VtZW50c0xpc3QpO1xuICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSh0YXJnZXQxLCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIGFzIHVua25vd24gYXMgVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIHByZXZpb3VzIHF1YXJ0ZXIgaG91ciBlLmcuIGlmIDI5IG1pbnMgLSByZXR1cm4gMTVcbiAgICogQHBhcmFtIGRhdGVUaW1lIC0gZGF0ZS90aW1lIGluIG1vbWVudCBmb3JtYXRcbiAgICogQHJldHVybnMgbW9tZW50XG4gICAqL1xuICBnZXRSb3VuZGVkRG93blF1YXJ0ZXJIb3VyKGRhdGVUaW1lOiBtb21lbnQuTW9tZW50KTogbW9tZW50Lk1vbWVudCB7XG4gICAgY29uc3QgbWlucyA9IGRhdGVUaW1lLm1pbnV0ZXMoKTtcblxuICAgIGlmIChtaW5zIDw9IDE1KSB7XG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAwKTtcbiAgICB9IGVsc2UgaWYgKG1pbnMgPD0gMzApIHtcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDE1KTtcbiAgICB9IGVsc2UgaWYgKG1pbnMgPD0gNDUpIHtcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDMwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgNDUpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgcm91bmRlZCB1cCBxdWFydGVyIGhvdXIgZS5nLiBpZiAyOSAtIHJldHVybiAzMFxuICAgKiBAcGFyYW0gZGF0ZVRpbWUgLSBkYXRlL3RpbWUgaW4gbW9tZW50IGZvcm1hdFxuICAgKiBAcmV0dXJucyBtb21lbnRcbiAgICovXG4gIGdldFJvdW5kZWRVcFF1YXJ0ZXJIb3VyKGRhdGVUaW1lOiBtb21lbnQuTW9tZW50KTogbW9tZW50Lk1vbWVudCB7XG4gICAgY29uc3QgbWlucyA9IGRhdGVUaW1lLm1pbnV0ZXMoKTtcblxuICAgIGlmIChtaW5zIDw9IDE1KSB7XG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAxNSk7XG4gICAgfSBlbHNlIGlmIChtaW5zIDw9IDMwKSB7XG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAzMCk7XG4gICAgfSBlbHNlIGlmIChtaW5zIDw9IDQ1KSB7XG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCA0NSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDApO1xuICAgICAgZGF0ZVRpbWUuYWRkKDEsICdob3VyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGVUaW1lO1xuICB9XG5cbiAgY3JlYXRlQmxvYihiYXNlNjRzdHI6IHN0cmluZywgZmlsZTogc3RyaW5nKTogQmxvYiB7XG4gICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGJhc2U2NHN0cik7XG4gICAgY29uc3QgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBieXRlTnVtYmVyc1tpXSA9IGJ5dGVDaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTtcbiAgICByZXR1cm4gbmV3IEJsb2IoW2J5dGVBcnJheV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHByZWZlcnJlZE1lc3NhZ2VzIGZvciByZXR1cm4gRHVhbFNpbmdsZVxuICAgKiBAcGFyYW0gc2VsZWN0ZWRVSWQgLSBvdXRib3VudCBEdWFsU2luZ2xlIGZsaWdodFxuICAgKiBAcGFyYW0gaXRlbSAtIHJldHVybiBEdWFsU2luZ2xlIGZsaWdodCBpdGVtXG4gICAqIEBwYXJhbSBydWxlQWN0aW9uU3VtbWFyeSAtIGFwcGx5SklURmxpZ2h0UnVsZXMgcnVsZXNcbiAgICovXG4gIHByZWZlcnJlZER1YWxTaW5nbGUoXG4gICAgaXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgc2VsZWN0ZWRVSWQ6IHN0cmluZyxcbiAgICBydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2VcbiAgKTogUHJlZmVycmVkRmxhZ3Mge1xuICAgIGlmIChpdGVtLmpvdXJuZXlIYXNoICYmIHJ1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbc2VsZWN0ZWRVSWRdKSB7XG4gICAgICBjb25zdCBwcmVmZXJyZWRGbGFncyA9XG4gICAgICAgIHJ1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbc2VsZWN0ZWRVSWRdW2l0ZW0uam91cm5leUhhc2hdID8/XG4gICAgICAgICh7fSBhcyBVbmF2YWlsYWJsZSk7XG5cbiAgICAgIGl0ZW0ucHJlZmVycmVkID0gcHJlZmVycmVkRmxhZ3MuY29tcGFueVByZWZlcnJlZFxuICAgICAgICA/IFByZWZlcnJlZEZsYWdzLmNvbXBhbnlQcmVmZXJyZWRcbiAgICAgICAgOiBwcmVmZXJyZWRGbGFncy5vZmZpY2VQcmVmZXJyZWRcbiAgICAgICAgPyBQcmVmZXJyZWRGbGFncy5vZmZpY2VQcmVmZXJyZWRcbiAgICAgICAgOiBwcmVmZXJyZWRGbGFncy50bWNQcmVmZXJyZWRcbiAgICAgICAgPyBQcmVmZXJyZWRGbGFncy50bWNQcmVmZXJyZWRcbiAgICAgICAgOiBQcmVmZXJyZWRGbGFncy5ub25lO1xuICAgICAgcmV0dXJuIGl0ZW0ucHJlZmVycmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJlZmVycmVkRmxhZ3Mubm9uZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBwcmVmZXJyZWRNZXNzYWdlcyBmb3IgcmV0dXJuIER1YWxTaW5nbGVcbiAgICogQHBhcmFtIHNlbGVjdGVkVUlkIC0gb3V0Ym91bnQgRHVhbFNpbmdsZSBmbGlnaHRcbiAgICogQHBhcmFtIGl0ZW0gLSByZXR1cm4gRHVhbFNpbmdsZSBmbGlnaHQgaXRlbVxuICAgKiBAcGFyYW0gcnVsZUFjdGlvblN1bW1hcnkgLSBhcHBseUpJVEZsaWdodFJ1bGVzIHJ1bGVzXG4gICAqL1xuICBwcmVmZXJyZWRNZXNzYWdlc0R1YWxTaW5nbGUoXG4gICAgaXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgc2VsZWN0ZWRVSWQ6IHN0cmluZyxcbiAgICBydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2VcbiAgKTogUmVjb3JkPFByZWZlcnJlZEZsYWdzLCBzdHJpbmc+IHtcbiAgICBpZiAoaXRlbS5qb3VybmV5SGFzaCAmJiBydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3NlbGVjdGVkVUlkXSkge1xuICAgICAgY29uc3QgcHJlZmVycmVkRmxhZ3MgPVxuICAgICAgICBydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3NlbGVjdGVkVUlkXVtpdGVtLmpvdXJuZXlIYXNoXSA/P1xuICAgICAgICAoe30gYXMgVW5hdmFpbGFibGUpO1xuXG4gICAgICBpdGVtLnByZWZlcnJlZE1lc3NhZ2VzID0ge1xuICAgICAgICBbUHJlZmVycmVkRmxhZ3MuY29tcGFueVByZWZlcnJlZF06IHByZWZlcnJlZEZsYWdzLmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8ICcnLFxuICAgICAgICBbUHJlZmVycmVkRmxhZ3Mub2ZmaWNlUHJlZmVycmVkXTogcHJlZmVycmVkRmxhZ3Mub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fCAnJyxcbiAgICAgICAgW1ByZWZlcnJlZEZsYWdzLnRtY1ByZWZlcnJlZF06IHByZWZlcnJlZEZsYWdzLnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHwgJycsXG4gICAgICAgIFtQcmVmZXJyZWRGbGFncy5hbGxdOlxuICAgICAgICAgIGAke3ByZWZlcnJlZEZsYWdzLmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8ICcnfSAke1xuICAgICAgICAgICAgcHJlZmVycmVkRmxhZ3Mub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fCAnJ1xuICAgICAgICAgIH0gJHtwcmVmZXJyZWRGbGFncy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8ICcnfWAudHJpbSgpIHx8ICcnLFxuICAgICAgICBbUHJlZmVycmVkRmxhZ3Mubm9uZV06ICcnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGl0ZW0ucHJlZmVycmVkTWVzc2FnZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtQcmVmZXJyZWRGbGFncy5jb21wYW55UHJlZmVycmVkXTogJycsXG4gICAgICAgIFtQcmVmZXJyZWRGbGFncy5vZmZpY2VQcmVmZXJyZWRdOiAnJyxcbiAgICAgICAgW1ByZWZlcnJlZEZsYWdzLnRtY1ByZWZlcnJlZF06ICcnLFxuICAgICAgICBbUHJlZmVycmVkRmxhZ3MuYWxsXTogJycsXG4gICAgICAgIFtQcmVmZXJyZWRGbGFncy5ub25lXTogJydcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdW5hdmFpbGFibGVEdWFsU2luZ2xlIGZvciByZXR1cm4gRHVhbFNpbmdsZVxuICAgKiBAcGFyYW0gc2VsZWN0ZWRVSWQgLSBvdXRib3VudCBEdWFsU2luZ2xlIGZsaWdodFxuICAgKiBAcGFyYW0gaXRlbSAtIHJldHVybiBEdWFsU2luZ2xlIGZsaWdodCBpdGVtXG4gICAqIEBwYXJhbSBydWxlQWN0aW9uU3VtbWFyeSAtIGFwcGx5SklURmxpZ2h0UnVsZXMgcnVsZXNcbiAgICovXG4gIHVuYXZhaWxhYmxlRHVhbFNpbmdsZShcbiAgICBpdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBzZWxlY3RlZFVJZDogc3RyaW5nLFxuICAgIHJ1bGVBY3Rpb25TdW1tYXJ5OiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoaXRlbS5qb3VybmV5SGFzaCAmJiBydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3NlbGVjdGVkVUlkXSkge1xuICAgICAgY29uc3QgdW5hdmFpbGFibGVGbGFncyA9XG4gICAgICAgIHJ1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbc2VsZWN0ZWRVSWRdW2l0ZW0uam91cm5leUhhc2hdID8/XG4gICAgICAgICh7fSBhcyBVbmF2YWlsYWJsZSk7XG4gICAgICByZXR1cm4gKGl0ZW0udW5hdmFpbGFibGUgPSB1bmF2YWlsYWJsZUZsYWdzLnVuYXZhaWxhYmxlIHx8IGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHJlbW92ZVJlc3VsdHNEdWFsU2luZ2xlIGZvciByZXR1cm4gRHVhbFNpbmdsZVxuICAgKiBAcGFyYW0gc2VsZWN0ZWRVSWQgLSBvdXRib3VudCBEdWFsU2luZ2xlIGZsaWdodFxuICAgKiBAcGFyYW0gaXRlbSAtIHJldHVybiBEdWFsU2luZ2xlIGZsaWdodCBpdGVtXG4gICAqIEBwYXJhbSBydWxlQWN0aW9uU3VtbWFyeSAtIGFwcGx5SklURmxpZ2h0UnVsZXMgcnVsZXNcbiAgICovXG4gIHJlbW92ZVJlc3VsdHNEdWFsU2luZ2xlKFxuICAgIGl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIHNlbGVjdGVkVUlkOiBzdHJpbmcsXG4gICAgcnVsZUFjdGlvblN1bW1hcnk6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChpdGVtLmpvdXJuZXlIYXNoICYmIHJ1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbc2VsZWN0ZWRVSWRdKSB7XG4gICAgICBjb25zdCByZW1vdmVSZXN1bHRzRmxhZyA9XG4gICAgICAgIHJ1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbc2VsZWN0ZWRVSWRdW2l0ZW0uam91cm5leUhhc2hdID8/XG4gICAgICAgICh7fSBhcyBVbmF2YWlsYWJsZSk7XG4gICAgICByZXR1cm4gKGl0ZW0ucmVtb3ZlUmVzdWx0ID0gcmVtb3ZlUmVzdWx0c0ZsYWcucmVtb3ZlUmVzdWx0IHx8IGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgcmVxdWlyZXNSZWFzb25EdWFsU2luZ2xlIGZvciByZXR1cm4gRHVhbFNpbmdsZVxuICAgKiBAcGFyYW0gc2VsZWN0ZWRVSWQgLSBvdXRib3VudCBEdWFsU2luZ2xlIGZsaWdodFxuICAgKiBAcGFyYW0gaXRlbSAtIHJldHVybiBEdWFsU2luZ2xlIGZsaWdodCBpdGVtXG4gICAqIEBwYXJhbSBydWxlQWN0aW9uU3VtbWFyeSAtIGFwcGx5SklURmxpZ2h0UnVsZXMgcnVsZXNcbiAgICovXG4gIHJlcXVpcmVzUmVhc29uRHVhbFNpbmdsZShcbiAgICBpdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBzZWxlY3RlZFVJZDogc3RyaW5nLFxuICAgIHJ1bGVBY3Rpb25TdW1tYXJ5OiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZVxuICApOiBzdHJpbmdbXSB7XG4gICAgaWYgKGl0ZW0uam91cm5leUhhc2ggJiYgcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtzZWxlY3RlZFVJZF0pIHtcbiAgICAgIGNvbnN0IHJlcXVpcmVzUmVhc29uRmxhZ3MgPVxuICAgICAgICBydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3NlbGVjdGVkVUlkXVtpdGVtLmpvdXJuZXlIYXNoXSA/P1xuICAgICAgICAoe30gYXMgVW5hdmFpbGFibGUpO1xuICAgICAgcmV0dXJuIGl0ZW0ucmVxdWlyZXNSZWFzb25LZXlzID0gcmVxdWlyZXNSZWFzb25GbGFncy5yZXF1aXJlc1JlYXNvbktleXMgfHwgW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHJlcXVpcmVzUmVhc29uTWVzc2FnZUR1YWxTaW5nbGUgZm9yIHJldHVybiBEdWFsU2luZ2xlXG4gICAqIEBwYXJhbSBzZWxlY3RlZFVJZCAtIG91dGJvdW50IER1YWxTaW5nbGUgZmxpZ2h0XG4gICAqIEBwYXJhbSBpdGVtIC0gcmV0dXJuIER1YWxTaW5nbGUgZmxpZ2h0IGl0ZW1cbiAgICogQHBhcmFtIHJ1bGVBY3Rpb25TdW1tYXJ5IC0gYXBwbHlKSVRGbGlnaHRSdWxlcyBydWxlc1xuICAgKi9cbiAgcmVxdWlyZXNSZWFzb25NZXNzYWdlRHVhbFNpbmdsZShcbiAgICBpdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBzZWxlY3RlZFVJZDogc3RyaW5nLFxuICAgIHJ1bGVBY3Rpb25TdW1tYXJ5OiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZVxuICApOiBzdHJpbmdbXSB7XG4gICAgaWYgKGl0ZW0uam91cm5leUhhc2ggJiYgcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtzZWxlY3RlZFVJZF0pIHtcbiAgICAgIGNvbnN0IHJlcXVpcmVzUmVhc29uTWVzc2FnZUZsYWdzID1cbiAgICAgICAgcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtzZWxlY3RlZFVJZF1baXRlbS5qb3VybmV5SGFzaF0gPz9cbiAgICAgICAgKHt9IGFzIFVuYXZhaWxhYmxlKTtcbiAgICAgIHJldHVybiAoaXRlbS5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzID0gcmVxdWlyZXNSZWFzb25NZXNzYWdlRmxhZ3MucmVxdWlyZXNSZWFzb25NZXNzYWdlcyB8fCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHVuYXZhaWxhYmxlTWVzc2FnZUR1YWxTaW5nbGUgZm9yIHJldHVybiBEdWFsU2luZ2xlXG4gICAqIEBwYXJhbSBzZWxlY3RlZFVJZCAtIG91dGJvdW50IER1YWxTaW5nbGUgZmxpZ2h0XG4gICAqIEBwYXJhbSBpdGVtIC0gcmV0dXJuIER1YWxTaW5nbGUgZmxpZ2h0IGl0ZW1cbiAgICogQHBhcmFtIHJ1bGVBY3Rpb25TdW1tYXJ5IC0gYXBwbHlKSVRGbGlnaHRSdWxlcyBydWxlc1xuICAgKi9cbiAgdW5hdmFpbGFibGVNZXNzYWdlRHVhbFNpbmdsZShcbiAgICBpdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBzZWxlY3RlZFVJZDogc3RyaW5nLFxuICAgIHJ1bGVBY3Rpb25TdW1tYXJ5OiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZVxuICApOiBzdHJpbmcge1xuICAgIGlmIChpdGVtLmpvdXJuZXlIYXNoICYmIHJ1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbc2VsZWN0ZWRVSWRdKSB7XG4gICAgICBjb25zdCB1bmF2YWlsYWJsZU1lc3NhZ2VGbGFncyA9XG4gICAgICAgIHJ1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbc2VsZWN0ZWRVSWRdW2l0ZW0uam91cm5leUhhc2hdID8/XG4gICAgICAgICh7fSBhcyBVbmF2YWlsYWJsZSk7XG4gICAgICByZXR1cm4gKGl0ZW0udW5hdmFpbGFibGVNZXNzYWdlID0gdW5hdmFpbGFibGVNZXNzYWdlRmxhZ3MudW5hdmFpbGFibGVNZXNzYWdlIHx8ICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgcHJlZmVyZW5jZUxldmVsIGZvciByZXR1cm4gRHVhbFNpbmdsZVxuICAgKiBAcGFyYW0gc2VsZWN0ZWRVSWQgLSBvdXRib3VudCBEdWFsU2luZ2xlIGZsaWdodFxuICAgKiBAcGFyYW0gaXRlbSAtIHJldHVybiBEdWFsU2luZ2xlIGZsaWdodCBpdGVtXG4gICAqIEBwYXJhbSBydWxlQWN0aW9uU3VtbWFyeSAtIGFwcGx5SklURmxpZ2h0UnVsZXMgcnVsZXNcbiAgICovXG4gIHByZWZlcmVuY2VMZXZlbER1YWxTaW5nbGUoXG4gICAgaXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgc2VsZWN0ZWRVSWQ6IHN0cmluZyxcbiAgICBydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2VcbiAgKTogUHJlZmVycmVkRmxhZ3Mge1xuICAgIGlmIChpdGVtLmpvdXJuZXlIYXNoICYmIHJ1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbc2VsZWN0ZWRVSWRdKSB7XG4gICAgICBjb25zdCBwcmVmZXJlbmNlTGV2ZWwgPVxuICAgICAgICArcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtzZWxlY3RlZFVJZF1baXRlbS5qb3VybmV5SGFzaF0/LnByZWZlcmVuY2VMZXZlbCB8fFxuICAgICAgICBudWxsO1xuICAgICAgcmV0dXJuIHByZWZlcmVuY2VMZXZlbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogKiBSZW1vdmUgdGhlIHRpbWV6b25lIHBhcnQgaW4gdGhlIGRhdGV0aW1lIHN0cmluZ1xuICAgKiAqIFRyYXZlbHBvcnQgcmVzdWx0cyBhcnJpdmUgd2l0aCB0aGUgZm9ybWF0IHRpbWUrLy10aW1lem9uZSwgd2hpY2ggbWVzc2VzIHdpdGggdGhlIHJlc3VsdHMuXG4gICAqICogVGhpcyBtZXRob2QganVzdCByZW1vdmVzIHRoZSArLy10aW1lem9uZSBzbyB0aGF0IHdlIGRpc3BsYXkgdGhlIGxvY2FsIHRpbWUsIG5vdCB0aGUgR01UIHRpbWVcbiAgICogQHBhcmFtIGRhdGVUaW1lXG4gICAqIEByZXR1cm5zIHN0cmluZ1xuICAgKi9cbiAgc2FuaXRpc2VEYXRlVGltZShkYXRlVGltZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0ZSA9IGRhdGVUaW1lLnNwbGl0KCdUJylbMF07XG4gICAgICBjb25zdCB0aW1lID0gZGF0ZVRpbWUuc3BsaXQoJ1QnKVsxXTtcblxuICAgICAgY29uc3QgZGVsaW1pdHRlciA9IHRpbWUuaW5jbHVkZXMoJysnKSA/ICcrJyA6IHRpbWUuaW5jbHVkZXMoJy0nKSA/ICctJyA6IG51bGw7XG4gICAgICBpZiAoZGVsaW1pdHRlcikge1xuICAgICAgICByZXR1cm4gYCR7ZGF0ZX1UJHt0aW1lLnNwbGl0KGRlbGltaXR0ZXIpWzBdfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGF0ZVRpbWU7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdTYW5pdGlzaW5nIGZsaWdodCB0aW1lIGZhaWVsZCcsIGRhdGVUaW1lKTtcbiAgICAgIHJldHVybiBkYXRlVGltZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IFNwZWNpYWxGYXJlIChQcml2YXRlIGZhcmUpXG4gICAqIEBwYXJhbSBmbGlnaHQgLSBGbGlnaHRJdGluZXJhcnlcbiAgICovXG4gIGdldFNwZWNpYWxGYXJlKGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGZsaWdodD8ub3V0Ym91bmRGbGlnaHRzWzBdPy5mYXJlSW5mbz8udHlwZSA9PT0gJ1ByaXZhdGUnIHx8XG4gICAgICBmbGlnaHQ/LmluYm91bmRGbGlnaHRzWzBdPy5mYXJlSW5mbz8udHlwZSA9PT0gJ1ByaXZhdGUnIHx8XG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCB0aGUgX190eXBlbmFtZSBwcm9wZXJ0aWVzIGluIHRoZSBvYmplY3QgZGVlcGx5XG4gICAqIEBwYXJhbSBvYmpcbiAgICogQHJldHVybnMgb2JqZWN0XG4gICAqL1xuICByZW1vdmVUeXBlTmFtZShvYmo6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICBKU09OLnN0cmluZ2lmeShvYmosIChuYW1lLCB2YWwpID0+IHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdfX3R5cGVuYW1lJykge1xuICAgICAgICAgIGRlbGV0ZSB2YWxbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZmluZEhpZ2hlc3RWYWx1ZUZyb21PYmoob2JqOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoYSwgYikgPT4gKG9ialthXSA+IG9ialtiXSA/IGEgOiBiKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gY2FsY3VsYXRpb24gb2YgdGhlIGF2ZXJhZ2UgdmFsdWUgZm9yIGFsbCBlbGVtZW50cyBvZiB0aGUgYXJyYXlcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBhbiBhcnJheSBvZiByZXN1bHRzIGZvciB0aGUgc2VsZWN0ZWQgcHJvZHVjdChSYWlsLCBFdXJvc3RhciwgQ2FyIEhpcmUsIFRheGksIEhvdGVsKVxuICAgKiBAcmV0dXJucyAtIHRoZSBhdmVyYWdlIENPMiBlbWlzc2lvbnMgcGVyIGl0ZW0sIHJvdW5kZWQgdG8gdHdvIGRlY2ltYWwgcGxhY2VzLlxuICAgKi9cbiAgY2FsY3VsYXRlQXZlcmFnZUNvMlBlckl0ZW0ocmVzdWx0czogYW55W10pOiBudW1iZXIge1xuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKCcrKysgTm8gcmVzdWx0cyBzdXBwbGllZCB0byBhdmVyYWdlIGNvMiBjYWxjdWxhdGlvbiAtIHJldHVybmluZyAwICsrKycpO1xuICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJyYXkgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBpdGVtLicpOyAgLy8gISAtIFRoaXMgd2FzIGNhdXNpbmcgZXJyb3JzIGluIHRoZSBjb25zdHJ1Y3RvcnMgb2Ygb3VyIHNlYXJjaGVzIC0gcmVzdWx0aW5nIGluIGFsbCBzb3J0cyBvZiBmdW5reSBpc3N1ZXNcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiByZXN1bHRzKSB7XG4gICAgICBpZiAoaXRlbSAmJiBpdGVtLmNvMlBlckl0ZW0pIHtcbiAgICAgICAgc3VtICs9IGl0ZW0uY28yUGVySXRlbTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICsoc3VtIC8gcmVzdWx0cy5sZW5ndGgpLnRvRml4ZWQoMik7XG4gIH1cblxuICBnZXRGbGlnaHRzRm9yRmFyZVJ1bGVzKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgYWxsRmxpZ2h0czogQmFza2V0SXRlbSk6IEZsaWdodEpvdXJuZXlbXSB7XG4gICAgY29uc3QgZmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdID0gW107XG5cbiAgICBjb25zdCBpc091dGJvdW5kID0gYWxsRmxpZ2h0cy5kZXRhaWwub3V0Ym91bmRGbGlnaHRzLnNvbWUoKGl0ZW06IEZsaWdodEpvdXJuZXkpID0+XG4gICAgICBpdGVtLmlkLmluY2x1ZGVzKGZsaWdodC5pZClcbiAgICApO1xuICAgIGNvbnN0IGlzSW5ib3VuZCA9IGFsbEZsaWdodHMuZGV0YWlsLmluYm91bmRGbGlnaHRzLnNvbWUoKGl0ZW06IEZsaWdodEpvdXJuZXkpID0+XG4gICAgICBpdGVtLmlkLmluY2x1ZGVzKGZsaWdodC5pZClcbiAgICApO1xuXG4gICAgLy8gSWYgYWxsIHRoZSBsZWdzIGhhdmUgdGhlIHNhbWUgTWFya2V0aW5nQ2FycmllciBhbmQgRmFyZUJhc2lzQ29kZSwgd2UgbmVlZCB0byBzZW5kIHRoZSB3aG9sZSBqb3VybmV5OyBvdGhlcndpc2UsIHNlbmQgdGhlIHBhcnRpY3VsYXIgbGVnXG4gICAgaWYgKGlzT3V0Ym91bmQpIHtcbiAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IGFsbEZsaWdodHMuZGV0YWlsLm91dGJvdW5kRmxpZ2h0cztcbiAgICAgIGlmIChcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzLmV2ZXJ5KFxuICAgICAgICAgIChpdGVtOiBJbnB1dEZsaWdodEpvdXJuZXkpID0+XG4gICAgICAgICAgICBpdGVtPy5tYXJrZXRpbmdDYXJyaWVyID09PSBvdXRib3VuZEZsaWdodHNbMF0ubWFya2V0aW5nQ2FycmllciAmJlxuICAgICAgICAgICAgaXRlbS5mYXJlQmFzaXNDb2RlID09PSBvdXRib3VuZEZsaWdodHNbMF0uZmFyZUJhc2lzQ29kZVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgZmxpZ2h0cy5wdXNoKC4uLm91dGJvdW5kRmxpZ2h0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbGlnaHRzLnB1c2goZmxpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzSW5ib3VuZCkge1xuICAgICAgY29uc3QgaW5ib3VuZEZsaWdodHMgPSBhbGxGbGlnaHRzLmRldGFpbC5pbmJvdW5kRmxpZ2h0cztcbiAgICAgIGlmIChcbiAgICAgICAgaW5ib3VuZEZsaWdodHMuZXZlcnkoXG4gICAgICAgICAgKGl0ZW06IElucHV0RmxpZ2h0Sm91cm5leSkgPT5cbiAgICAgICAgICAgIGl0ZW0ubWFya2V0aW5nQ2FycmllciA9PT0gaW5ib3VuZEZsaWdodHNbMF0ubWFya2V0aW5nQ2FycmllciAmJlxuICAgICAgICAgICAgaXRlbS5mYXJlQmFzaXNDb2RlID09PSBpbmJvdW5kRmxpZ2h0c1swXS5mYXJlQmFzaXNDb2RlXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBmbGlnaHRzLnB1c2goLi4uaW5ib3VuZEZsaWdodHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmxpZ2h0cy5wdXNoKGZsaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsaWdodHMucHVzaChmbGlnaHQpO1xuICAgIH1cbiAgICByZXR1cm4gZmxpZ2h0cztcbiAgfVxuXG4gIGZsaXBOdW1iZXJzRm9yUHJlZmVycmVkKGluYm91bmROdW1iZXI6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIEJhc2VIZWxwZXJSb3V0aW5lcy5wcmVmZXJyZWRGbGlwWycnICsgaW5ib3VuZE51bWJlcl0gfHwgaW5ib3VuZE51bWJlcjtcbiAgfVxuXG4gIGZpbmRTZXJ2aWNlVHlwZShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKTogU2VydmljZVR5cGUge1xuICAgIGlmIChiYXNrZXRJdGVtPy5zZXJ2aWNlPy50eXBlKSByZXR1cm4gYmFza2V0SXRlbT8uc2VydmljZT8udHlwZTtcbiAgICBjb25zdCBkZXRhaWwgPSBiYXNrZXRJdGVtLmRldGFpbDtcbiAgICBjb25zdCBpc0V1cm9zdGFyID0gZGV0YWlsPy5vdXRib3VuZEZsaWdodHM/Lmxlbmd0aFxuICAgICAgPyBkZXRhaWw/Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3BlcmF0aW5nQ2Fycmllck5hbWU/LnRvVXBwZXJDYXNlKCkgPT09IFNlcnZpY2VUeXBlLkV1cm9zdGFyXG4gICAgICA6IGZhbHNlO1xuICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgY2FzZSAhIWRldGFpbD8udmVoaWNsZVR5cGU6XG4gICAgICAgIHJldHVybiBTZXJ2aWNlVHlwZS5DYWI7XG4gICAgICBjYXNlICEhZGV0YWlsPy5ob3RlbEFkZHJlc3M6XG4gICAgICAgIHJldHVybiBTZXJ2aWNlVHlwZS5Ib3RlbDtcbiAgICAgIGNhc2UgISFkZXRhaWw/Lm91dHdhcmREZXRhaWw6XG4gICAgICAgIHJldHVybiBTZXJ2aWNlVHlwZS5SYWlsO1xuICAgICAgY2FzZSAhIWRldGFpbD8udmVuZG9yTmFtZTpcbiAgICAgICAgcmV0dXJuIFNlcnZpY2VUeXBlLkNhcjtcbiAgICAgIGNhc2UgISFkZXRhaWw/LmRlcGFydERhdGV0aW1lOlxuICAgICAgICByZXR1cm4gU2VydmljZVR5cGUuUGFya2luZztcbiAgICAgIGNhc2UgaXNFdXJvc3RhcjpcbiAgICAgICAgcmV0dXJuIFNlcnZpY2VUeXBlLkV1cm9zdGFyO1xuICAgICAgY2FzZSAhIWRldGFpbD8ub3V0Ym91bmRGbGlnaHRzOlxuICAgICAgICByZXR1cm4gU2VydmljZVR5cGUuRmxpZ2h0O1xuICAgICAgY2FzZSAhIWRldGFpbD8uZGVzdGluYXRpb246XG4gICAgICAgIHJldHVybiBTZXJ2aWNlVHlwZS5Mb3VuZ2U7XG4gICAgICBjYXNlIGRldGFpbD8uYXJyaXZhbERhdGV0aW1lICYmICFkZXRhaWw/LmRlc3RpbmF0aW9uOlxuICAgICAgICByZXR1cm4gU2VydmljZVR5cGUuRmFzdFRyYWNrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWdlc0FycmF5KHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKToge25hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcn1bXSB7XG4gICAgY29uc3QgYWdlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgYWdlcy5wdXNoKHtuYW1lOiBgJHtpfSB5ZWFyc2AsIHZhbHVlOiBpfSk7XG4gICAgfVxuICAgIHJldHVybiBhZ2VzO1xuICB9XG4gIGNvbnZlcnRGbGlnaHRKb3VybmV5VG9JbnB1dEZsaWdodEpvdXJuZXkoZmxpZ2h0OiBGbGlnaHRKb3VybmV5KTogSW5wdXRGbGlnaHRKb3VybmV5IHtcbiAgICBjb25zdCBpbnB1dEZsaWdodEpvdXJuZXk6IElucHV0RmxpZ2h0Sm91cm5leSA9IHtcbiAgICAgIGFkZGl0aW9uYWw6IGZsaWdodC5hZGRpdGlvbmFsLCBcbiAgICAgIGJvb2tpbmdDb2RlOiBmbGlnaHQuYm9va2luZ0NvZGUsXG4gICAgICBjYWJpbkNsYXNzOiBmbGlnaHQuY2FiaW5DbGFzcyxcbiAgICAgIGNhYmluQ29kZTogZmxpZ2h0LmNhYmluQ29kZSxcbiAgICAgIGNhYmluUmF3OiBmbGlnaHQuY2FiaW5SYXcsXG4gICAgICBkYXRlVGltZUFycml2aW5nOiBmbGlnaHQuZGF0ZVRpbWVBcnJpdmluZyxcbiAgICAgIGRhdGVUaW1lQXJyaXZpbmdVVEM6IGZsaWdodC5kYXRlVGltZUFycml2aW5nVVRDLFxuICAgICAgZGF0ZVRpbWVEZXBhcnRpbmc6IGZsaWdodC5kYXRlVGltZURlcGFydGluZyxcbiAgICAgIGRhdGVUaW1lRGVwYXJ0aW5nVVRDOiBmbGlnaHQuZGF0ZVRpbWVEZXBhcnRpbmdVVEMsXG4gICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IGZsaWdodC5kZXN0aW5hdGlvbkFpcnBvcnQsXG4gICAgICBkZXN0aW5hdGlvbkFpcnBvcnREZXRhaWw6IGZsaWdodC5kZXN0aW5hdGlvbkFpcnBvcnREZXRhaWwsXG4gICAgICBkZXN0aW5hdGlvbkFpcnBvcnROYW1lOiBmbGlnaHQuZGVzdGluYXRpb25BaXJwb3J0TmFtZSxcbiAgICAgIGRlc3RpbmF0aW9uVGVybWluYWw6IGZsaWdodC5kZXN0aW5hdGlvblRlcm1pbmFsLFxuICAgICAgZXF1aXBtZW50Q29kZTogZmxpZ2h0LmVxdWlwbWVudENvZGUsXG4gICAgICBlcXVpcG1lbnROYW1lOiBmbGlnaHQuZXF1aXBtZW50TmFtZSxcbiAgICAgIGZhcmVCYXNpc0NvZGU6IGZsaWdodC5mYXJlQmFzaXNDb2RlLFxuICAgICAgZmFyZUNvbmRpdGlvbnM6IGZsaWdodC5mYXJlQ29uZGl0aW9ucyxcbiAgICAgIGZhcmVJbmZvOiBmbGlnaHQuZmFyZUluZm8sXG4gICAgICBnb3Zlcm5pbmdDYXJyaWVyOiBmbGlnaHQuZ292ZXJuaW5nQ2FycmllcixcbiAgICAgIGlkOiBmbGlnaHQuaWQgPyBmbGlnaHQuaWQgOiAnJyxcbiAgICAgIG1hcmtldGluZ0NhcnJpZXI6IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyLFxuICAgICAgbWFya2V0aW5nQ2FycmllckRldGFpbDogZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJEZXRhaWwsXG4gICAgICBtYXJrZXRpbmdDYXJyaWVyTmFtZTogZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJOYW1lLFxuICAgICAgbWFya2V0aW5nRmxpZ2h0TnVtYmVyOiBmbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyLFxuICAgICAgbWFya2V0aW5nTmFtZXM6IGZsaWdodC5tYXJrZXRpbmdOYW1lcyxcbiAgICAgIG1hcnJpYWdlR3JvdXA6IGZsaWdodC5tYXJyaWFnZUdyb3VwLFxuICAgICAgb3BlcmF0aW5nQ2FycmllcjogZmxpZ2h0Lm9wZXJhdGluZ0NhcnJpZXIsXG4gICAgICBvcGVyYXRpbmdDYXJyaWVyRGV0YWlsOiBmbGlnaHQub3BlcmF0aW5nQ2FycmllckRldGFpbCxcbiAgICAgIG9wZXJhdGluZ0NhcnJpZXJOYW1lOiBmbGlnaHQub3BlcmF0aW5nQ2Fycmllck5hbWUsXG4gICAgICBvcGVyYXRpbmdGbGlnaHROdW1iZXI6IGZsaWdodC5vcGVyYXRpbmdGbGlnaHROdW1iZXIsXG4gICAgICBvcmlnaW5BaXJwb3J0OiBmbGlnaHQub3JpZ2luQWlycG9ydCxcbiAgICAgIG9yaWdpbkFpcnBvcnREZXRhaWw6IGZsaWdodC5vcmlnaW5BaXJwb3J0RGV0YWlsLFxuICAgICAgb3JpZ2luQWlycG9ydE5hbWU6IGZsaWdodC5vcmlnaW5BaXJwb3J0TmFtZSxcbiAgICAgIG9yaWdpblRlcm1pbmFsOiBmbGlnaHQub3JpZ2luVGVybWluYWwsXG4gICAgICBzZWF0c0F2YWlsYWJsZTogZmxpZ2h0LnNlYXRzQXZhaWxhYmxlLFxuICAgICAgc3RvcHM6IGZsaWdodC5zdG9wcyxcbiAgICAgIHRvdGFsRHVyYXRpb246IGZsaWdodC50b3RhbER1cmF0aW9uLFxuICAgICAgdmVuZG9yQ29kZTogZmxpZ2h0LnZlbmRvckNvZGVcbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXRGbGlnaHRKb3VybmV5O1xuICB9XG5cbiAgY29udmVydFRyYXZlbGxlcnNUb1RyYXZlbGxlckFyZ3ModHJhdmVsbGVyczogVHJhdmVsbGVyW10pOiBUcmF2ZWxsZXJBcmdbXSB7XG4gICAgcmV0dXJuIHRyYXZlbGxlcnMubWFwKHRyYXZlbGxlciA9PiA8VHJhdmVsbGVyQXJnPntcbiAgICAgIGlkOiB0cmF2ZWxsZXIuaWRcbiAgICB9KVxuICB9XG4gIFxuICAgIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSByZXBsYWNlcyBnZXJtYW4gbGV0dGVycyB3aXRoIGFjY2VudHNcbiAgICogQHBhcmFtIGNpdHlOYW1lIC0gc3RyaW5nIG9mIHNlYXJjaGVkIGZvciBjaXR5bmFtZVxuICAgKi9cbiAgICBub3JtYWxpemVDaXR5TmFtZUUoY2l0eU5hbWU6c3RyaW5nKSB7XG4gICAgICByZXR1cm4gY2l0eU5hbWVcbiAgICAgICAgLnJlcGxhY2UoL8OkL2dpLCAnYWUnKVxuICAgICAgICAucmVwbGFjZSgvw7YvZ2ksICdvZScpXG4gICAgICAgIC5yZXBsYWNlKC/DvC9naSwgJ3VlJyk7XG4gICAgfVxuXG4gICAgICAgIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSByZXBsYWNlcyBnZXJtYW4gbGV0dGVycyB3aXRoIGFjY2VudHNcbiAgICogQHBhcmFtIGNpdHlOYW1lIC0gc3RyaW5nIG9mIHNlYXJjaGVkIGZvciBjaXR5bmFtZVxuICAgKi9cbiAgICAgICAgbm9ybWFsaXplQ2l0eU5hbWUoY2l0eU5hbWU6c3RyaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIGNpdHlOYW1lXG4gICAgICAgICAgICAucmVwbGFjZSgvw6QvZ2ksICdhJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC/Dti9naSwgJ28nKVxuICAgICAgICAgICAgLnJlcGxhY2UoL8O8L2dpLCAndScpO1xuICAgICAgICB9XG4gXG59XG5cbmZ1bmN0aW9uIGlzU2V0KG9iajogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGw7XG59XG5cbiJdfQ==
|