@aws-cdk/toolkit-lib 1.28.0 → 1.29.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/actions/validate/index.d.ts +10 -0
- package/lib/actions/validate/index.js +1 -1
- package/lib/api/cloud-assembly/environment.js +16 -4
- package/lib/api/deployments/cfn-api.d.ts +24 -6
- package/lib/api/deployments/cfn-api.js +81 -33
- package/lib/api/hotswap/hotswap-deployments.js +3 -1
- package/lib/api/hotswap/lambda-functions.js +3 -33
- package/lib/api/io/private/index.d.ts +1 -0
- package/lib/api/io/private/index.js +2 -1
- package/lib/api/io/private/messages.d.ts +1 -0
- package/lib/api/io/private/messages.js +8 -4
- package/lib/api/io/private/span.d.ts +6 -0
- package/lib/api/io/private/span.js +10 -3
- package/lib/api/validate/validate-formatting.d.ts +5 -0
- package/lib/api/validate/validate-formatting.js +127 -0
- package/lib/api/work-graph/work-graph-builder.d.ts +3 -0
- package/lib/api/work-graph/work-graph-builder.js +38 -3
- package/lib/api/work-graph/work-graph-types.d.ts +19 -7
- package/lib/api/work-graph/work-graph-types.js +1 -1
- package/lib/api/work-graph/work-graph.d.ts +2 -1
- package/lib/api/work-graph/work-graph.js +8 -1
- package/lib/index_bg.wasm +0 -0
- package/lib/payloads/hotswap.d.ts +8 -1
- package/lib/payloads/hotswap.js +1 -1
- package/lib/private/tools.d.ts +2 -0
- package/lib/private/tools.js +120 -0
- package/lib/private/tools.js.plain +21 -0
- package/lib/toolkit/toolkit.d.ts +2 -1
- package/lib/toolkit/toolkit.js +103 -19
- package/lib/util/index.d.ts +0 -1
- package/lib/util/index.js +1 -2
- package/package.json +13 -11
- package/lib/util/archive.d.ts +0 -2
- package/lib/util/archive.js +0 -86
|
@@ -135,6 +135,7 @@ async function hotswapDeployment(sdkProvider, ioSpan, assetParams, stack, hotswa
|
|
|
135
135
|
stack,
|
|
136
136
|
mode: hotswapMode,
|
|
137
137
|
hotswapped: false,
|
|
138
|
+
hotswapFallback: true,
|
|
138
139
|
hotswappableChanges,
|
|
139
140
|
nonHotswappableChanges,
|
|
140
141
|
};
|
|
@@ -154,6 +155,7 @@ async function hotswapDeployment(sdkProvider, ioSpan, assetParams, stack, hotswa
|
|
|
154
155
|
stack,
|
|
155
156
|
mode: hotswapMode,
|
|
156
157
|
hotswapped: !error,
|
|
158
|
+
hotswapFallback: false,
|
|
157
159
|
hotswappableChanges,
|
|
158
160
|
nonHotswappableChanges,
|
|
159
161
|
error,
|
|
@@ -483,4 +485,4 @@ function nonHotswappableResourceMessage(subject, reason) {
|
|
|
483
485
|
}
|
|
484
486
|
return (0, util_1.format)('resource: %s, type: %s, reason: %s', chalk.bold(subject.logicalId), chalk.bold(subject.resourceType), chalk.red(reason));
|
|
485
487
|
}
|
|
486
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC1kZXBsb3ltZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvdHN3YXAtZGVwbG95bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErR0Esb0RBMENDO0FBekpELCtCQUE4QjtBQUU5Qix5REFBeUQ7QUFFekQsK0JBQStCO0FBQy9CLDZDQUF1RDtBQUN2RCxxQ0FBZ0Q7QUFHaEQsc0RBQXdHO0FBQ3hHLDJFQUEwRTtBQUMxRSwrREFBNkU7QUFPN0UscUNBR2tCO0FBQ2xCLGlEQUFnRTtBQUNoRSxxRUFBK0Y7QUFDL0YseURBQXdFO0FBQ3hFLG1FQUdpQztBQUVqQywrREFBMkQ7QUFFM0QsMkNBQXlDO0FBRXpDLHNDQUFpQztBQUNqQyxxRUFBNEU7QUFFNUUsNkVBQTZFO0FBQzdFLDRHQUE0RztBQUM1RyxNQUFNLE1BQU0sR0FBNkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBVzVELE1BQU0sa0JBQWtCLEdBQXVDO0lBQzdELFNBQVM7SUFDVCx1QkFBdUIsRUFBRSxxREFBa0M7SUFDM0Qsc0JBQXNCLEVBQUUscURBQWtDO0lBQzFELG9CQUFvQixFQUFFLHFEQUFrQztJQUV4RCxVQUFVO0lBQ1Ysd0JBQXdCLEVBQUUsdURBQTJCO0lBQ3JELHFDQUFxQyxFQUFFLHVEQUEyQjtJQUNsRSw2QkFBNkIsRUFBRSx1REFBMkI7SUFDMUQsc0JBQXNCLEVBQUUsdURBQTJCO0lBRW5ELDBCQUEwQixFQUFFLDZDQUE4QjtJQUMxRCx5QkFBeUIsRUFBRSwwREFBb0M7SUFDL0QsNkJBQTZCLEVBQUUsOERBQXNDO0lBQ3JFLGtCQUFrQixFQUFFLEtBQUssRUFDdkIsU0FBaUIsRUFDakIsTUFBc0IsRUFDdEIsbUJBQW1ELEVBQ3pCLEVBQUU7UUFDNUIsNEVBQTRFO1FBQzVFLElBQUksTUFBTSxJQUFBLGlFQUF5QyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQzVGLE9BQU8sRUFBRSxD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QUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQ2xCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgKiBhcyBjZm5fZGlmZiBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB0eXBlIHsgV2FpdGVyUmVzdWx0IH0gZnJvbSAnQHNtaXRoeS91dGlsLXdhaXRlcic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBOb25Ib3Rzd2FwcGFibGVSZWFzb24gfSBmcm9tICcuLi8uLi9wYXlsb2Fkcyc7XG5pbXBvcnQgeyBmb3JtYXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgU0RLLCBTZGtQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBDbG91ZEZvcm1hdGlvblN0YWNrLCBOZXN0ZWRTdGFja1RlbXBsYXRlcyB9IGZyb20gJy4uL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IGxvYWRDdXJyZW50VGVtcGxhdGVXaXRoTmVzdGVkU3RhY2tzLCBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpc0hvdHN3YXBwYWJsZUFwcFN5bmNDaGFuZ2UgfSBmcm9tICcuL2FwcHN5bmMtbWFwcGluZy10ZW1wbGF0ZXMnO1xuaW1wb3J0IHsgaXNIb3Rzd2FwcGFibGVDb2RlQnVpbGRQcm9qZWN0Q2hhbmdlIH0gZnJvbSAnLi9jb2RlLWJ1aWxkLXByb2plY3RzJztcbmltcG9ydCB0eXBlIHtcbiAgSG90c3dhcENoYW5nZSxcbiAgSG90c3dhcE9wZXJhdGlvbixcbiAgUmVqZWN0ZWRDaGFuZ2UsXG4gIEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbn0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHtcbiAgSUNPTixcbiAgbm9uSG90c3dhcHBhYmxlUmVzb3VyY2UsXG59IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IGlzSG90c3dhcHBhYmxlRWNzU2VydmljZUNoYW5nZSB9IGZyb20gJy4vZWNzLXNlcnZpY2VzJztcbmltcG9ydCB7IHJlYWRIb3Rzd2FwVGVtcGxhdGVDYWNoZSwgd3JpdGVIb3Rzd2FwVGVtcGxhdGVDYWNoZSB9IGZyb20gJy4vaG90c3dhcC10ZW1wbGF0ZS1jYWNoZSc7XG5pbXBvcnQgeyBpc0hvdHN3YXBwYWJsZUxhbWJkYUZ1bmN0aW9uQ2hhbmdlIH0gZnJvbSAnLi9sYW1iZGEtZnVuY3Rpb25zJztcbmltcG9ydCB7XG4gIHNraXBDaGFuZ2VGb3JTM0RlcGxveUN1c3RvbVJlc291cmNlUG9saWN5LFxuICBpc0hvdHN3YXBwYWJsZVMzQnVja2V0RGVwbG95bWVudENoYW5nZSxcbn0gZnJvbSAnLi9zMy1idWNrZXQtZGVwbG95bWVudHMnO1xuaW1wb3J0IHR5cGUgeyBBZmZlY3RlZFJlc291cmNlLCBIb3Rzd2FwUmVzdWx0LCBSZXNvdXJjZVN1YmplY3QsIFJlc291cmNlQ2hhbmdlLCBOb25Ib3Rzd2FwcGFibGVDaGFuZ2UgfSBmcm9tICcuLi8uLi9wYXlsb2Fkcyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuLi9kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBJTywgU1BBTiB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBJTWVzc2FnZVNwYW4sIElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgeyBNb2RlIH0gZnJvbSAnLi4vcGx1Z2luJztcbmltcG9ydCB7IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlIH0gZnJvbSAnLi9jbG91ZC1jb250cm9sLXJlc291cmNlJztcblxuLy8gTXVzdCB1c2UgYSByZXF1aXJlKCkgb3RoZXJ3aXNlIGVzYnVpbGQgY29tcGxhaW5zIGFib3V0IGNhbGxpbmcgYSBuYW1lc3BhY2Vcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtaW1wb3J0c1xuY29uc3QgcExpbWl0OiB0eXBlb2YgaW1wb3J0KCdwLWxpbWl0JykgPSByZXF1aXJlKCdwLWxpbWl0Jyk7XG5cbnR5cGUgSG90c3dhcERldGVjdG9yID0gKFxuICBsb2dpY2FsSWQ6IHN0cmluZyxcbiAgY2hhbmdlOiBSZXNvdXJjZUNoYW5nZSxcbiAgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuICBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXM6IEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbikgPT4gUHJvbWlzZTxIb3Rzd2FwQ2hhbmdlW10+O1xuXG50eXBlIEhvdHN3YXBNb2RlID0gJ2hvdHN3YXAtb25seScgfCAnZmFsbC1iYWNrJztcblxuY29uc3QgUkVTT1VSQ0VfREVURUNUT1JTOiB7IFtrZXk6IHN0cmluZ106IEhvdHN3YXBEZXRlY3RvciB9ID0ge1xuICAvLyBMYW1iZGFcbiAgJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbic6IGlzSG90c3dhcHBhYmxlTGFtYmRhRnVuY3Rpb25DaGFuZ2UsXG4gICdBV1M6OkxhbWJkYTo6VmVyc2lvbic6IGlzSG90c3dhcHBhYmxlTGFtYmRhRnVuY3Rpb25DaGFuZ2UsXG4gICdBV1M6OkxhbWJkYTo6QWxpYXMnOiBpc0hvdHN3YXBwYWJsZUxhbWJkYUZ1bmN0aW9uQ2hhbmdlLFxuXG4gIC8vIEFwcFN5bmNcbiAgJ0FXUzo6QXBwU3luYzo6UmVzb2x2ZXInOiBpc0hvdHN3YXBwYWJsZUFwcFN5bmNDaGFuZ2UsXG4gICdBV1M6OkFwcFN5bmM6OkZ1bmN0aW9uQ29uZmlndXJhdGlvbic6IGlzSG90c3dhcHBhYmxlQXBwU3luY0NoYW5nZSxcbiAgJ0FXUzo6QXBwU3luYzo6R3JhcGhRTFNjaGVtYSc6IGlzSG90c3dhcHBhYmxlQXBwU3luY0NoYW5nZSxcbiAgJ0FXUzo6QXBwU3luYzo6QXBpS2V5JzogaXNIb3Rzd2FwcGFibGVBcHBTeW5jQ2hhbmdlLFxuXG4gICdBV1M6OkVDUzo6VGFza0RlZmluaXRpb24nOiBpc0hvdHN3YXBwYWJsZUVjc1NlcnZpY2VDaGFuZ2UsXG4gICdBV1M6OkNvZGVCdWlsZDo6UHJvamVjdCc6IGlzSG90c3dhcHBhYmxlQ29kZUJ1aWxkUHJvamVjdENoYW5nZSxcbiAgJ0N1c3RvbTo6Q0RLQnVja2V0RGVwbG95bWVudCc6IGlzSG90c3dhcHBhYmxlUzNCdWNrZXREZXBsb3ltZW50Q2hhbmdlLFxuICAnQVdTOjpJQU06OlBvbGljeSc6IGFzeW5jIChcbiAgICBsb2dpY2FsSWQ6IHN0cmluZyxcbiAgICBjaGFuZ2U6IFJlc291cmNlQ2hhbmdlLFxuICAgIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbiAgKTogUHJvbWlzZTxIb3Rzd2FwQ2hhbmdlW10+ID0+IHtcbiAgICAvLyBJZiB0aGUgcG9saWN5IGlzIGZvciBhIFMzQnVja2V0RGVwbG95bWVudENoYW5nZSwgd2UgY2FuIGlnbm9yZSB0aGUgY2hhbmdlXG4gICAgaWYgKGF3YWl0IHNraXBDaGFuZ2VGb3JTM0RlcGxveUN1c3RvbVJlc291cmNlUG9saWN5KGxvZ2ljYWxJZCwgY2hhbmdlLCBldmFsdWF0ZUNmblRlbXBsYXRlKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBbbm9uSG90c3dhcHBhYmxlUmVzb3VyY2UoY2hhbmdlKV07XG4gIH0sXG5cbiAgJ0FXUzo6Q0RLOjpNZXRhZGF0YSc6IGFzeW5jICgpID0+IFtdLFxuXG4gIC8vIFJlc291cmNlcyB0aGF0IHVzZSBDQ0FQSVNcbiAgJ0FXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaSc6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxuICAnQVdTOjpBcGlHYXRld2F5OjpEZXBsb3ltZW50JzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG4gICdBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCc6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxuICAnQVdTOjpBcGlHYXRld2F5VjI6OkFwaSc6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxuICAnQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uJzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG4gICdBV1M6OkJlZHJvY2s6OkFnZW50JzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG4gICdBV1M6OkV2ZW50czo6UnVsZSc6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxuICAnQVdTOjpEeW5hbW9EQjo6VGFibGUnOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlJzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG4gICdBV1M6OlNRUzo6UXVldWUnOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6Q2xvdWRXYXRjaDo6QWxhcm0nOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6Q2xvdWRXYXRjaDo6Q29tcG9zaXRlQWxhcm0nOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkJzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG4gICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZSc6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxuICAnQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lJzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG5cbiAgLy8gUXVpY2tTaWdodFxuICAnQVdTOjpRdWlja1NpZ2h0OjpEYXNoYm9hcmQnOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6UXVpY2tTaWdodDo6QW5hbHlzaXMnOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6UXVpY2tTaWdodDo6VGVtcGxhdGUnOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6UXVpY2tTaWdodDo6RGF0YVNldCc6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxuICAnQVdTOjpRdWlja1NpZ2h0OjpEYXRhU291cmNlJzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG59O1xuXG4vKipcbiAqIFBlcmZvcm0gYSBob3Rzd2FwIGRlcGxveW1lbnQsIHNob3J0LWNpcmN1aXRpbmcgQ2xvdWRGb3JtYXRpb24gaWYgcG9zc2libGUuXG4gKiBJZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzaG9ydC1jaXJjdWl0IHRoZSBkZXBsb3ltZW50XG4gKiAoYmVjYXVzZSB0aGUgQ0RLIFN0YWNrIGNvbnRhaW5zIGNoYW5nZXMgdGhhdCBjYW5ub3QgYmUgZGVwbG95ZWQgd2l0aG91dCBDbG91ZEZvcm1hdGlvbiksXG4gKiByZXR1cm5zIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJ5SG90c3dhcERlcGxveW1lbnQoXG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuICBhc3NldFBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgY2xvdWRGb3JtYXRpb25TdGFjazogQ2xvdWRGb3JtYXRpb25TdGFjayxcbiAgc3RhY2tBcnRpZmFjdDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LFxuICBob3Rzd2FwTW9kZTogSG90c3dhcE1vZGUsXG4gIGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlczogSG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzLFxuKTogUHJvbWlzZTxTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgaG90c3dhcFNwYW4gPSBhd2FpdCBpb0hlbHBlci5zcGFuKFNQQU4uSE9UU1dBUCkuYmVnaW4oe1xuICAgIHN0YWNrOiBzdGFja0FydGlmYWN0LFxuICAgIG1vZGU6IGhvdHN3YXBNb2RlLFxuICB9KTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBob3Rzd2FwRGVwbG95bWVudChcbiAgICBzZGtQcm92aWRlcixcbiAgICBob3Rzd2FwU3BhbixcbiAgICBhc3NldFBhcmFtcyxcbiAgICBzdGFja0FydGlmYWN0LFxuICAgIGhvdHN3YXBNb2RlLFxuICAgIGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbiAgKTtcblxuICBhd2FpdCBob3Rzd2FwU3Bhbi5lbmQocmVzdWx0KTtcblxuICAvLyBUaGlzIGlzIGEgaG90c3dhcCBlcnJvciB0aGF0IHdhcyBjYXVnaHQgZHVyaW5nIHRoZSBob3Rzd2FwRGVwbG95bWVudCBmdW5jdGlvblxuICAvLyBJdCBpcyB0aHJvd24gYWZ0ZXIgdGhlIGhvdHN3YXAgc3BhbiBlbmRzIHNvIGl0IGNhbiBiZSByZXBvcnRlZCB0byB0ZWxlbWV0cnlcbiAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfVxuXG4gIGlmIChyZXN1bHQ/LmhvdHN3YXBwZWQgPT09IHRydWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgbm9PcDogcmVzdWx0LmhvdHN3YXBwYWJsZUNoYW5nZXMubGVuZ3RoID09PSAwLFxuICAgICAgc3RhY2tBcm46IGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tJZCxcbiAgICAgIG91dHB1dHM6IGNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cyxcbiAgICAgIGRlbGV0ZUZhaWx1cmVzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBQZXJmb3JtIGEgaG90c3dhcCBkZXBsb3ltZW50LCBzaG9ydC1jaXJjdWl0aW5nIENsb3VkRm9ybWF0aW9uIGlmIHBvc3NpYmxlLlxuICogUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXR0ZW1wdGVkIGhvdHN3YXAgZGVwbG95bWVudFxuICovXG5hc3luYyBmdW5jdGlvbiBob3Rzd2FwRGVwbG95bWVudChcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICBpb1NwYW46IElNZXNzYWdlU3Bhbjxhbnk+LFxuICBhc3NldFBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgaG90c3dhcE1vZGU6IEhvdHN3YXBNb2RlLFxuICBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXM6IEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbik6IFByb21pc2U8T21pdDxIb3Rzd2FwUmVzdWx0LCAnZHVyYXRpb24nPj4ge1xuICAvLyByZXNvbHZlIHRoZSBlbnZpcm9ubWVudCwgc28gd2UgY2FuIHN1YnN0aXR1dGUgdGhpbmdzIGxpa2UgQVdTOjpSZWdpb24gaW4gQ0ZOIGV4cHJlc3Npb25zXG4gIGNvbnN0IHJlc29sdmVkRW52ID0gYXdhaXQgc2RrUHJvdmlkZXIucmVzb2x2ZUVudmlyb25tZW50KHN0YWNrLmVudmlyb25tZW50KTtcbiAgLy8gY3JlYXRlIGEgbmV3IFNESyB1c2luZyB0aGUgQ0xJIGNyZWRlbnRpYWxzLCBiZWNhdXNlIHRoZSBkZWZhdWx0IG9uZSB3aWxsIG5vdCB3b3JrIGZvciBuZXctc3R5bGUgc3ludGhlc2lzIC1cbiAgLy8gaXQgYXNzdW1lcyB0aGUgYm9vdHN0cmFwIGRlcGxveSBSb2xlLCB3aGljaCBkb2Vzbid0IGhhdmUgcGVybWlzc2lvbnMgdG8gdXBkYXRlIExhbWJkYSBmdW5jdGlvbnNcbiAgY29uc3Qgc2RrID0gKGF3YWl0IHNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KHJlc29sdmVkRW52LCBNb2RlLkZvcldyaXRpbmcpKS5zZGs7XG5cbiAgLy8gQ2hlY2sgZm9yIGEgY2FjaGVkIHRlbXBsYXRlIGZyb20gYSBwcmV2aW91cyBob3Rzd2FwIGRlcGxveW1lbnQuXG4gIC8vIFVzZSBpZiBhdmFpbGFibGUsIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJlc291cmNlcyBpbnZvbHZlZCBpbiBob3Rzd2FwLlxuICBjb25zdCBob3Rzd2FwQ2FjaGUgPSBhd2FpdCByZWFkSG90c3dhcFRlbXBsYXRlQ2FjaGUoc3RhY2suYXNzZW1ibHkuZGlyZWN0b3J5LCBzdGFjay5zdGFja05hbWUsIHN0YWNrLnRlbXBsYXRlKTtcbiAgY29uc3QgY3VycmVudFRlbXBsYXRlID0gaG90c3dhcENhY2hlID8/IGF3YWl0IGxvYWRDdXJyZW50VGVtcGxhdGVXaXRoTmVzdGVkU3RhY2tzKHN0YWNrLCBzZGspO1xuXG4gIGNvbnN0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUgPSBuZXcgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlKHtcbiAgICBzdGFja0FydGlmYWN0OiBzdGFjayxcbiAgICBwYXJhbWV0ZXJzOiBhc3NldFBhcmFtcyxcbiAgICBhY2NvdW50OiByZXNvbHZlZEVudi5hY2NvdW50LFxuICAgIHJlZ2lvbjogcmVzb2x2ZWRFbnYucmVnaW9uLFxuICAgIHBhcnRpdGlvbjogKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5wYXJ0aXRpb24sXG4gICAgc2RrLFxuICAgIG5lc3RlZFN0YWNrczogY3VycmVudFRlbXBsYXRlLm5lc3RlZFN0YWNrcyxcbiAgfSk7XG5cbiAgY29uc3Qgc3RhY2tDaGFuZ2VzID0gY2ZuX2RpZmYuZnVsbERpZmYoY3VycmVudFRlbXBsYXRlLmRlcGxveWVkUm9vdFRlbXBsYXRlLCBzdGFjay50ZW1wbGF0ZSk7XG4gIGNvbnN0IHsgaG90c3dhcHBhYmxlLCBub25Ib3Rzd2FwcGFibGUgfSA9IGF3YWl0IGNsYXNzaWZ5UmVzb3VyY2VDaGFuZ2VzKFxuICAgIHN0YWNrQ2hhbmdlcyxcbiAgICBldmFsdWF0ZUNmblRlbXBsYXRlLFxuICAgIHNkayxcbiAgICBjdXJyZW50VGVtcGxhdGUubmVzdGVkU3RhY2tzLCBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsXG4gICk7XG5cbiAgYXdhaXQgbG9nUmVqZWN0ZWRDaGFuZ2VzKGlvU3Bhbiwgbm9uSG90c3dhcHBhYmxlLCBob3Rzd2FwTW9kZSk7XG5cbiAgY29uc3QgaG90c3dhcHBhYmxlQ2hhbmdlcyA9IGhvdHN3YXBwYWJsZS5tYXAobyA9PiBvLmNoYW5nZSk7XG4gIGNvbnN0IG5vbkhvdHN3YXBwYWJsZUNoYW5nZXMgPSBub25Ib3Rzd2FwcGFibGUubWFwKG4gPT4gbi5jaGFuZ2UpO1xuXG4gIGF3YWl0IGlvU3Bhbi5ub3RpZnkoSU8uQ0RLX1RPT0xLSVRfSTU0MDEubXNnKCdIb3Rzd2FwIHBsYW4gY3JlYXRlZCcsIHtcbiAgICBzdGFjayxcbiAgICBtb2RlOiBob3Rzd2FwTW9kZSxcbiAgICBob3Rzd2FwcGFibGVDaGFuZ2VzLFxuICAgIG5vbkhvdHN3YXBwYWJsZUNoYW5nZXMsXG4gIH0pKTtcblxuICAvLyBwcmVzZXJ2ZSBjbGFzc2ljIGhvdHN3YXAgYmVoYXZpb3JcbiAgaWYgKGhvdHN3YXBNb2RlID09PSAnZmFsbC1iYWNrJykge1xuICAgIGlmIChub25Ib3Rzd2FwcGFibGVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YWNrLFxuICAgICAgICBtb2RlOiBob3Rzd2FwTW9kZSxcbiAgICAgICAgaG90c3dhcHBlZDogZmFsc2UsXG4gICAgICAgIGhvdHN3YXBwYWJsZUNoYW5nZXMsXG4gICAgICAgIG5vbkhvdHN3YXBwYWJsZUNoYW5nZXMsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGFwcGx5IHRoZSBzaG9ydC1jaXJjdWl0YWJsZSBjaGFuZ2VzXG4gIGxldCBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwbHlBbGxIb3Rzd2FwT3BlcmF0aW9ucyhzZGssIGlvU3BhbiwgaG90c3dhcHBhYmxlKTtcbiAgICAvLyBDYWNoZSB0aGUgc3ludGhlc2l6ZWQgdGVtcGxhdGUgc28gdGhlIG5leHQgaG90c3dhcCBkaWZmcyBhZ2FpbnN0IGl0XG4gICAgYXdhaXQgd3JpdGVIb3Rzd2FwVGVtcGxhdGVDYWNoZShzdGFjay5hc3NlbWJseS5kaXJlY3RvcnksIHN0YWNrLnN0YWNrTmFtZSwgc3RhY2sudGVtcGxhdGUsIGN1cnJlbnRUZW1wbGF0ZS5uZXN0ZWRTdGFja3MpO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YWNrLFxuICAgIG1vZGU6IGhvdHN3YXBNb2RlLFxuICAgIGhvdHN3YXBwZWQ6ICFlcnJvcixcbiAgICBob3Rzd2FwcGFibGVDaGFuZ2VzLFxuICAgIG5vbkhvdHN3YXBwYWJsZUNoYW5nZXMsXG4gICAgZXJyb3IsXG4gIH07XG59XG5cbmludGVyZmFjZSBDbGFzc2lmaWVkQ2hhbmdlcyB7XG4gIGhvdHN3YXBwYWJsZTogSG90c3dhcE9wZXJhdGlvbltdO1xuICBub25Ib3Rzd2FwcGFibGU6IFJlamVjdGVkQ2hhbmdlW107XG59XG5cbi8qKlxuICogQ2xhc3NpZmllcyBhbGwgY2hhbmdlcyB0byBhbGwgcmVzb3VyY2VzIGFzIGVpdGhlciBob3Rzd2FwcGFibGUgb3Igbm90LlxuICogTWV0YWRhdGEgY2hhbmdlcyBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBvZiAobm9uKWhvdHN3YXBwYWJsZSByZXNvdXJjZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNsYXNzaWZ5UmVzb3VyY2VDaGFuZ2VzKFxuICBzdGFja0NoYW5nZXM6IGNmbl9kaWZmLlRlbXBsYXRlRGlmZixcbiAgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuICBzZGs6IFNESyxcbiAgbmVzdGVkU3RhY2tOYW1lczogeyBbbmVzdGVkU3RhY2tOYW1lOiBzdHJpbmddOiBOZXN0ZWRTdGFja1RlbXBsYXRlcyB9LFxuICBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXM6IEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbik6IFByb21pc2U8Q2xhc3NpZmllZENoYW5nZXM+IHtcbiAgY29uc3QgcmVzb3VyY2VEaWZmZXJlbmNlcyA9IGdldFN0YWNrUmVzb3VyY2VEaWZmZXJlbmNlcyhzdGFja0NoYW5nZXMpO1xuXG4gIGNvbnN0IHByb21pc2VzOiBBcnJheTwoKSA9PiBQcm9taXNlPEhvdHN3YXBDaGFuZ2VbXT4+ID0gW107XG4gIGNvbnN0IGhvdHN3YXBwYWJsZVJlc291cmNlcyA9IG5ldyBBcnJheTxIb3Rzd2FwT3BlcmF0aW9uPigpO1xuICBjb25zdCBub25Ib3Rzd2FwcGFibGVSZXNvdXJjZXMgPSBuZXcgQXJyYXk8UmVqZWN0ZWRDaGFuZ2U+KCk7XG4gIGNvbnN0IG5lc3RlZFN0YWNrVGFza3M6IEFycmF5PFByb21pc2U8Q2xhc3NpZmllZENoYW5nZXM+PiA9IFtdO1xuICBjb25zdCBsaW1pdCA9IHBMaW1pdCgxMCk7XG5cbiAgZm9yIChjb25zdCBsb2dpY2FsSWQgb2YgT2JqZWN0LmtleXMoc3RhY2tDaGFuZ2VzLm91dHB1dHMuY2hhbmdlcykpIHtcbiAgICBub25Ib3Rzd2FwcGFibGVSZXNvdXJjZXMucHVzaCh7XG4gICAgICBob3Rzd2FwcGFibGU6IGZhbHNlLFxuICAgICAgY2hhbmdlOiB7XG4gICAgICAgIHJlYXNvbjogTm9uSG90c3dhcHBhYmxlUmVhc29uLk9VVFBVVCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdvdXRwdXQgd2FzIGNoYW5nZWQnLFxuICAgICAgICBzdWJqZWN0OiB7XG4gICAgICAgICAgdHlwZTogJ091dHB1dCcsXG4gICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgIG1ldGFkYXRhOiBldmFsdWF0ZUNmblRlbXBsYXRlLm1ldGFkYXRhRm9yKGxvZ2ljYWxJZCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIC8vIGdhdGhlciB0aGUgcmVzdWx0cyBvZiB0aGUgZGV0ZWN0b3IgZnVuY3Rpb25zXG4gIGZvciAoY29uc3QgW2xvZ2ljYWxJZCwgY2hhbmdlXSBvZiBPYmplY3QuZW50cmllcyhyZXNvdXJjZURpZmZlcmVuY2VzKSkge1xuICAgIGlmIChjaGFuZ2UubmV3VmFsdWU/LlR5cGUgPT09ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycgJiYgY2hhbmdlLm9sZFZhbHVlPy5UeXBlID09PSAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snKSB7XG4gICAgICBuZXN0ZWRTdGFja1Rhc2tzLnB1c2gobGltaXQoKCkgPT4gZmluZE5lc3RlZEhvdHN3YXBwYWJsZUNoYW5nZXMoXG4gICAgICAgIGxvZ2ljYWxJZCxcbiAgICAgICAgY2hhbmdlLFxuICAgICAgICBuZXN0ZWRTdGFja05hbWVzLFxuICAgICAgICBldmFsdWF0ZUNmblRlbXBsYXRlLFxuICAgICAgICBzZGssXG4gICAgICAgIGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbiAgICAgICkpKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSA9IGlzQ2FuZGlkYXRlRm9ySG90c3dhcHBpbmcobG9naWNhbElkLCBjaGFuZ2UsIGV2YWx1YXRlQ2ZuVGVtcGxhdGUpO1xuICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gcnVuIHRoaXMgdGhyb3VnaCB0aGUgZGV0ZWN0b3IgZnVuY3Rpb25zLCB3ZSBjYW4gYWxyZWFkeSBqdWRnZSB0aGlzXG4gICAgaWYgKCdob3Rzd2FwcGFibGUnIGluIGhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSkge1xuICAgICAgaWYgKCFob3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUuaG90c3dhcHBhYmxlKSB7XG4gICAgICAgIG5vbkhvdHN3YXBwYWJsZVJlc291cmNlcy5wdXNoKGhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlVHlwZTogc3RyaW5nID0gaG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLm5ld1ZhbHVlLlR5cGU7XG4gICAgaWYgKHJlc291cmNlVHlwZSBpbiBSRVNPVVJDRV9ERVRFQ1RPUlMpIHtcbiAgICAgIC8vIHJ1biBkZXRlY3RvciBmdW5jdGlvbnMgbGF6aWx5IHRvIHByZXZlbnQgdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uc1xuICAgICAgcHJvbWlzZXMucHVzaCgoKSA9PlxuICAgICAgICBSRVNPVVJDRV9ERVRFQ1RPUlNbcmVzb3VyY2VUeXBlXShsb2dpY2FsSWQsIGhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZSwgaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vbkhvdHN3YXBwYWJsZVJlc291cmNlcy5wdXNoKG5vbkhvdHN3YXBwYWJsZVJlc291cmNlKGhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlc29sdmUgYWxsIG5lc3RlZCBzdGFjayBhbmQgZGV0ZWN0b3IgcmVzdWx0cyBpbiBwYXJhbGxlbFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgY29uc3QgbmVzdGVkUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKG5lc3RlZFN0YWNrVGFza3MpO1xuICBmb3IgKGNvbnN0IG5lc3RlZCBvZiBuZXN0ZWRSZXN1bHRzKSB7XG4gICAgaG90c3dhcHBhYmxlUmVzb3VyY2VzLnB1c2goLi4ubmVzdGVkLmhvdHN3YXBwYWJsZSk7XG4gICAgbm9uSG90c3dhcHBhYmxlUmVzb3VyY2VzLnB1c2goLi4ubmVzdGVkLm5vbkhvdHN3YXBwYWJsZSk7XG4gIH1cblxuICBjb25zdCBjaGFuZ2VzRGV0ZWN0aW9uUmVzdWx0czogQXJyYXk8SG90c3dhcENoYW5nZVtdPiA9IFtdO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgY29uc3QgZGV0ZWN0b3JSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMubWFwKChmbikgPT4gbGltaXQoZm4pKSk7XG4gIGZvciAoY29uc3QgaG90c3dhcERldGVjdGlvblJlc3VsdHMgb2YgZGV0ZWN0b3JSZXN1bHRzKSB7XG4gICAgY2hhbmdlc0RldGVjdGlvblJlc3VsdHMucHVzaChob3Rzd2FwRGV0ZWN0aW9uUmVzdWx0cyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHJlc291cmNlRGV0ZWN0aW9uUmVzdWx0cyBvZiBjaGFuZ2VzRGV0ZWN0aW9uUmVzdWx0cykge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlSZXN1bHQgb2YgcmVzb3VyY2VEZXRlY3Rpb25SZXN1bHRzKSB7XG4gICAgICBwcm9wZXJ0eVJlc3VsdC5ob3Rzd2FwcGFibGVcbiAgICAgICAgPyBob3Rzd2FwcGFibGVSZXNvdXJjZXMucHVzaChwcm9wZXJ0eVJlc3VsdClcbiAgICAgICAgOiBub25Ib3Rzd2FwcGFibGVSZXNvdXJjZXMucHVzaChwcm9wZXJ0eVJlc3VsdCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBob3Rzd2FwcGFibGU6IGhvdHN3YXBwYWJsZVJlc291cmNlcyxcbiAgICBub25Ib3Rzd2FwcGFibGU6IG5vbkhvdHN3YXBwYWJsZVJlc291cmNlcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBjaGFuZ2VzIHRvIHJlc291cmNlcyBpbiB0aGUgZ2l2ZW4gU3RhY2suXG4gKlxuICogQHBhcmFtIHN0YWNrQ2hhbmdlcyAtIHRoZSBjb2xsZWN0aW9uIG9mIGFsbCBjaGFuZ2VzIHRvIGEgZ2l2ZW4gU3RhY2tcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhY2tSZXNvdXJjZURpZmZlcmVuY2VzKHN0YWNrQ2hhbmdlczogY2ZuX2RpZmYuVGVtcGxhdGVEaWZmKToge1xuICBbbG9naWNhbElkOiBzdHJpbmddOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2U7XG59IHtcbiAgLy8gd2UgbmVlZCB0byBjb2xsYXBzZSBsb2dpY2FsIElEIHJlbmFtZSBjaGFuZ2VzIGludG8gb25lIGNoYW5nZSxcbiAgLy8gYXMgdGhleSBhcmUgcmVwcmVzZW50ZWQgaW4gc3RhY2tDaGFuZ2VzIGFzIGEgcGFpciBvZiB0d28gY2hhbmdlczogb25lIGFkZGl0aW9uIGFuZCBvbmUgcmVtb3ZhbFxuICBjb25zdCBhbGxSZXNvdXJjZUNoYW5nZXM6IHsgW2xvZ0lkOiBzdHJpbmddOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UgfSA9IHN0YWNrQ2hhbmdlcy5yZXNvdXJjZXMuY2hhbmdlcztcbiAgY29uc3QgYWxsUmVtb3ZhbENoYW5nZXMgPSBmaWx0ZXJEaWN0KGFsbFJlc291cmNlQ2hhbmdlcywgKHJlc0NoYW5nZSkgPT4gcmVzQ2hhbmdlLmlzUmVtb3ZhbCk7XG4gIGNvbnN0IGFsbE5vblJlbW92YWxDaGFuZ2VzID0gZmlsdGVyRGljdChhbGxSZXNvdXJjZUNoYW5nZXMsIChyZXNDaGFuZ2UpID0+ICFyZXNDaGFuZ2UuaXNSZW1vdmFsKTtcbiAgZm9yIChjb25zdCBbbG9nSWQsIG5vblJlbW92YWxDaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKGFsbE5vblJlbW92YWxDaGFuZ2VzKSkge1xuICAgIGlmIChub25SZW1vdmFsQ2hhbmdlLmlzQWRkaXRpb24pIHtcbiAgICAgIGNvbnN0IGFkZENoYW5nZSA9IG5vblJlbW92YWxDaGFuZ2U7XG4gICAgICAvLyBzZWFyY2ggZm9yIGFuIGlkZW50aWNhbCByZW1vdmFsIGNoYW5nZVxuICAgICAgY29uc3QgaWRlbnRpY2FsUmVtb3ZhbENoYW5nZSA9IE9iamVjdC5lbnRyaWVzKGFsbFJlbW92YWxDaGFuZ2VzKS5maW5kKChbXywgcmVtQ2hhbmdlXSkgPT4ge1xuICAgICAgICByZXR1cm4gY2hhbmdlc0FyZUZvclNhbWVSZXNvdXJjZShyZW1DaGFuZ2UsIGFkZENoYW5nZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmIHdlIGZvdW5kIG9uZSwgdGhlbiB0aGlzIG1lYW5zIHRoaXMgaXMgYSByZW5hbWUgY2hhbmdlXG4gICAgICBpZiAoaWRlbnRpY2FsUmVtb3ZhbENoYW5nZSkge1xuICAgICAgICBjb25zdCBbcmVtb3ZlZExvZ0lkLCByZW1vdmVkUmVzb3VyY2VDaGFuZ2VdID0gaWRlbnRpY2FsUmVtb3ZhbENoYW5nZTtcbiAgICAgICAgYWxsTm9uUmVtb3ZhbENoYW5nZXNbbG9nSWRdID0gbWFrZVJlbmFtZURpZmZlcmVuY2UocmVtb3ZlZFJlc291cmNlQ2hhbmdlLCBhZGRDaGFuZ2UpO1xuICAgICAgICAvLyBkZWxldGUgdGhlIHJlbW92YWwgY2hhbmdlIHRoYXQgZm9ybXMgdGhlIHJlbmFtZSBwYWlyXG4gICAgICAgIGRlbGV0ZSBhbGxSZW1vdmFsQ2hhbmdlc1tyZW1vdmVkTG9nSWRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyB0aGUgZmluYWwgcmVzdWx0IGFyZSBhbGwgb2YgdGhlIHJlbWFpbmluZyByZW1vdmFsIGNoYW5nZXMsXG4gIC8vIHBsdXMgYWxsIG9mIHRoZSBub24tcmVtb3ZhbCBjaGFuZ2VzXG4gIC8vICh3ZSBzYXZlZCB0aGUgcmVuYW1lIGNoYW5nZXMgaW4gdGhhdCBvYmplY3QgYWxyZWFkeSlcbiAgcmV0dXJuIHtcbiAgICAuLi5hbGxSZW1vdmFsQ2hhbmdlcyxcbiAgICAuLi5hbGxOb25SZW1vdmFsQ2hhbmdlcyxcbiAgfTtcbn1cblxuLyoqIEZpbHRlcnMgYW4gb2JqZWN0IHdpdGggc3RyaW5nIGtleXMgYmFzZWQgb24gd2hldGhlciB0aGUgY2FsbGJhY2sgcmV0dXJucyAndHJ1ZScgZm9yIHRoZSBnaXZlbiB2YWx1ZSBpbiB0aGUgb2JqZWN0LiAqL1xuZnVuY3Rpb24gZmlsdGVyRGljdDxUPihkaWN0OiB7IFtrZXk6IHN0cmluZ106IFQgfSwgZnVuYzogKHQ6IFQpID0+IGJvb2xlYW4pOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhkaWN0KS5yZWR1Y2UoXG4gICAgKGFjYywgW2tleSwgdF0pID0+IHtcbiAgICAgIGlmIChmdW5jKHQpKSB7XG4gICAgICAgIGFjY1trZXldID0gdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSxcbiAgICB7fSBhcyB7IFtrZXk6IHN0cmluZ106IFQgfSxcbiAgKTtcbn1cblxuLyoqIEZpbmRzIGFueSBob3Rzd2FwcGFibGUgY2hhbmdlcyBpbiBhbGwgbmVzdGVkIHN0YWNrcy4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmROZXN0ZWRIb3Rzd2FwcGFibGVDaGFuZ2VzKFxuICBsb2dpY2FsSWQ6IHN0cmluZyxcbiAgY2hhbmdlOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UsXG4gIG5lc3RlZFN0YWNrVGVtcGxhdGVzOiB7IFtuZXN0ZWRTdGFja05hbWU6IHN0cmluZ106IE5lc3RlZFN0YWNrVGVtcGxhdGVzIH0sXG4gIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbiAgc2RrOiBTREssXG4gIGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlczogSG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzLFxuKTogUHJvbWlzZTxDbGFzc2lmaWVkQ2hhbmdlcz4ge1xuICBjb25zdCBuZXN0ZWRTdGFjayA9IG5lc3RlZFN0YWNrVGVtcGxhdGVzW2xvZ2ljYWxJZF07XG4gIGlmICghbmVzdGVkU3RhY2sucGh5c2ljYWxOYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhvdHN3YXBwYWJsZTogW10sXG4gICAgICBub25Ib3Rzd2FwcGFibGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGhvdHN3YXBwYWJsZTogZmFsc2UsXG4gICAgICAgICAgY2hhbmdlOiB7XG4gICAgICAgICAgICByZWFzb246IE5vbkhvdHN3YXBwYWJsZVJlYXNvbi5ORVNURURfU1RBQ0tfQ1JFQVRJT04sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ25ld2x5IGNyZWF0ZWQgbmVzdGVkIHN0YWNrcyBjYW5ub3QgYmUgaG90c3dhcHBlZCcsXG4gICAgICAgICAgICBzdWJqZWN0OiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdSZXNvdXJjZScsXG4gICAgICAgICAgICAgIGxvZ2ljYWxJZCxcbiAgICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICAgICAgICBtZXRhZGF0YTogZXZhbHVhdGVDZm5UZW1wbGF0ZS5tZXRhZGF0YUZvcihsb2dpY2FsSWQpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZXZhbHVhdGVOZXN0ZWRDZm5UZW1wbGF0ZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuY3JlYXRlTmVzdGVkRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlKFxuICAgIG5lc3RlZFN0YWNrLnBoeXNpY2FsTmFtZSxcbiAgICBuZXN0ZWRTdGFjay5nZW5lcmF0ZWRUZW1wbGF0ZSxcbiAgICBjaGFuZ2UubmV3VmFsdWU/LlByb3BlcnRpZXM/LlBhcmFtZXRlcnMsXG4gICk7XG5cbiAgY29uc3QgbmVzdGVkRGlmZiA9IGNmbl9kaWZmLmZ1bGxEaWZmKFxuICAgIG5lc3RlZFN0YWNrVGVtcGxhdGVzW2xvZ2ljYWxJZF0uZGVwbG95ZWRUZW1wbGF0ZSxcbiAgICBuZXN0ZWRTdGFja1RlbXBsYXRlc1tsb2dpY2FsSWRdLmdlbmVyYXRlZFRlbXBsYXRlLFxuICApO1xuXG4gIHJldHVybiBjbGFzc2lmeVJlc291cmNlQ2hhbmdlcyhcbiAgICBuZXN0ZWREaWZmLFxuICAgIGV2YWx1YXRlTmVzdGVkQ2ZuVGVtcGxhdGUsXG4gICAgc2RrLFxuICAgIG5lc3RlZFN0YWNrVGVtcGxhdGVzW2xvZ2ljYWxJZF0ubmVzdGVkU3RhY2tUZW1wbGF0ZXMsXG4gICAgaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzLFxuICApO1xufVxuXG4vKiogUmV0dXJucyAndHJ1ZScgaWYgYSBwYWlyIG9mIGNoYW5nZXMgaXMgZm9yIHRoZSBzYW1lIHJlc291cmNlLiAqL1xuZnVuY3Rpb24gY2hhbmdlc0FyZUZvclNhbWVSZXNvdXJjZShcbiAgb2xkQ2hhbmdlOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UsXG4gIG5ld0NoYW5nZTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgb2xkQ2hhbmdlLm9sZFJlc291cmNlVHlwZSA9PT0gbmV3Q2hhbmdlLm5ld1Jlc291cmNlVHlwZSAmJlxuICAgIC8vIHRoaXMgaXNuJ3QgZ3JlYXQsIGJ1dCBJIGRvbid0IHdhbnQgdG8gYnJpbmcgaW4gc29tZXRoaW5nIGxpa2UgdW5kZXJzY29yZSBqdXN0IGZvciB0aGlzIGNvbXBhcmlzb25cbiAgICBKU09OLnN0cmluZ2lmeShvbGRDaGFuZ2Uub2xkUHJvcGVydGllcykgPT09IEpTT04uc3RyaW5naWZ5KG5ld0NoYW5nZS5uZXdQcm9wZXJ0aWVzKVxuICApO1xufVxuXG5mdW5jdGlvbiBtYWtlUmVuYW1lRGlmZmVyZW5jZShcbiAgcmVtQ2hhbmdlOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UsXG4gIGFkZENoYW5nZTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlLFxuKTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlIHtcbiAgcmV0dXJuIG5ldyBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UoXG4gICAgLy8gd2UgaGF2ZSB0byBmaWxsIGluIHRoZSBvbGQgdmFsdWUsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoaXMgd2lsbCBiZSBjbGFzc2lmaWVkIGFzIGEgbm9uLWhvdHN3YXBwYWJsZSBjaGFuZ2VcbiAgICByZW1DaGFuZ2Uub2xkVmFsdWUsXG4gICAgYWRkQ2hhbmdlLm5ld1ZhbHVlLFxuICAgIHtcbiAgICAgIHJlc291cmNlVHlwZToge1xuICAgICAgICBvbGRUeXBlOiByZW1DaGFuZ2Uub2xkUmVzb3VyY2VUeXBlLFxuICAgICAgICBuZXdUeXBlOiBhZGRDaGFuZ2UubmV3UmVzb3VyY2VUeXBlLFxuICAgICAgfSxcbiAgICAgIHByb3BlcnR5RGlmZnM6IChhZGRDaGFuZ2UgYXMgYW55KS5wcm9wZXJ0eURpZmZzLFxuICAgICAgb3RoZXJEaWZmczogKGFkZENoYW5nZSBhcyBhbnkpLm90aGVyRGlmZnMsXG4gICAgfSxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgYEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZWAgaWYgdGhlIGNoYW5nZSBpcyBob3Rzd2FwcGFibGVcbiAqIFJldHVybnMgYW4gZW1wdHkgYEhvdHN3YXBwYWJsZUNoYW5nZWAgaWYgdGhlIGNoYW5nZSBpcyB0byBDREs6Ok1ldGFkYXRhXG4gKiBSZXR1cm5zIGEgYE5vbkhvdHN3YXBwYWJsZUNoYW5nZWAgaWYgdGhlIGNoYW5nZSBpcyBub3QgaG90c3dhcHBhYmxlXG4gKi9cbmZ1bmN0aW9uIGlzQ2FuZGlkYXRlRm9ySG90c3dhcHBpbmcoXG4gIGxvZ2ljYWxJZDogc3RyaW5nLFxuICBjaGFuZ2U6IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSxcbiAgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuKTogUmVqZWN0ZWRDaGFuZ2UgfCBSZXNvdXJjZUNoYW5nZSB7XG4gIC8vIGEgcmVzb3VyY2UgaGFzIGJlZW4gcmVtb3ZlZCBPUiBhIHJlc291cmNlIGhhcyBiZWVuIGFkZGVkOyB3ZSBjYW4ndCBzaG9ydC1jaXJjdWl0IHRoYXQgY2hhbmdlXG4gIGlmICghY2hhbmdlLm9sZFZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhvdHN3YXBwYWJsZTogZmFsc2UsXG4gICAgICBjaGFuZ2U6IHtcbiAgICAgICAgcmVhc29uOiBOb25Ib3Rzd2FwcGFibGVSZWFzb24uUkVTT1VSQ0VfQ1JFQVRJT04sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgcmVzb3VyY2UgJyR7bG9naWNhbElkfScgd2FzIGNyZWF0ZWQgYnkgdGhpcyBkZXBsb3ltZW50YCxcbiAgICAgICAgc3ViamVjdDoge1xuICAgICAgICAgIHR5cGU6ICdSZXNvdXJjZScsXG4gICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogY2hhbmdlLm5ld1ZhbHVlIS5UeXBlLFxuICAgICAgICAgIG1ldGFkYXRhOiBldmFsdWF0ZUNmblRlbXBsYXRlLm1ldGFkYXRhRm9yKGxvZ2ljYWxJZCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH0gZWxzZSBpZiAoIWNoYW5nZS5uZXdWYWx1ZSkge1xuICAgIHJldHVybiB7XG4gICAgICBob3Rzd2FwcGFibGU6IGZhbHNlLFxuICAgICAgbG9naWNhbElkLFxuICAgICAgY2hhbmdlOiB7XG4gICAgICAgIHJlYXNvbjogTm9uSG90c3dhcHBhYmxlUmVhc29uLlJFU09VUkNFX0RFTEVUSU9OLFxuICAgICAgICBkZXNjcmlwdGlvbjogYHJlc291cmNlICcke2xvZ2ljYWxJZH0nIHdhcyBkZXN0cm95ZWQgYnkgdGhpcyBkZXBsb3ltZW50YCxcbiAgICAgICAgc3ViamVjdDoge1xuICAgICAgICAgIHR5cGU6ICdSZXNvdXJjZScsXG4gICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogY2hhbmdlLm9sZFZhbHVlLlR5cGUsXG4gICAgICAgICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3IobG9naWNhbElkKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIGEgcmVzb3VyY2UgaGFzIGhhZCBpdHMgdHlwZSBjaGFuZ2VkXG4gIGlmIChjaGFuZ2UubmV3VmFsdWUuVHlwZSAhPT0gY2hhbmdlLm9sZFZhbHVlLlR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaG90c3dhcHBhYmxlOiBmYWxzZSxcbiAgICAgIGNoYW5nZToge1xuICAgICAgICByZWFzb246IE5vbkhvdHN3YXBwYWJsZVJlYXNvbi5SRVNPVVJDRV9UWVBFX0NIQU5HRUQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgcmVzb3VyY2UgJyR7bG9naWNhbElkfScgaGFkIGl0cyB0eXBlIGNoYW5nZWQgZnJvbSAnJHtjaGFuZ2Uub2xkVmFsdWU/LlR5cGV9JyB0byAnJHtjaGFuZ2UubmV3VmFsdWU/LlR5cGV9J2AsXG4gICAgICAgIHN1YmplY3Q6IHtcbiAgICAgICAgICB0eXBlOiAnUmVzb3VyY2UnLFxuICAgICAgICAgIGxvZ2ljYWxJZCxcbiAgICAgICAgICByZXNvdXJjZVR5cGU6IGNoYW5nZS5uZXdWYWx1ZS5UeXBlLFxuICAgICAgICAgIG1ldGFkYXRhOiBldmFsdWF0ZUNmblRlbXBsYXRlLm1ldGFkYXRhRm9yKGxvZ2ljYWxJZCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvZ2ljYWxJZCxcbiAgICBvbGRWYWx1ZTogY2hhbmdlLm9sZFZhbHVlLFxuICAgIG5ld1ZhbHVlOiBjaGFuZ2UubmV3VmFsdWUsXG4gICAgcHJvcGVydHlVcGRhdGVzOiBjaGFuZ2UucHJvcGVydHlVcGRhdGVzLFxuICAgIG1ldGFkYXRhOiBldmFsdWF0ZUNmblRlbXBsYXRlLm1ldGFkYXRhRm9yKGxvZ2ljYWxJZCksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5QWxsSG90c3dhcE9wZXJhdGlvbnMoc2RrOiBTREssIGlvU3BhbjogSU1lc3NhZ2VTcGFuPGFueT4sIGhvdHN3YXBwYWJsZUNoYW5nZXM6IEhvdHN3YXBPcGVyYXRpb25bXSk6IFByb21pc2U8dm9pZFtdPiB7XG4gIGlmIChob3Rzd2FwcGFibGVDaGFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG5cbiAgYXdhaXQgaW9TcGFuLmRlZmF1bHRzLmluZm8oYFxcbiR7SUNPTn0gaG90c3dhcHBpbmcgcmVzb3VyY2VzOmApO1xuICBjb25zdCBsaW1pdCA9IHBMaW1pdCgxMCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9wcm9taXNlYWxsLW5vLXVuYm91bmRlZC1wYXJhbGxlbGlzbVxuICByZXR1cm4gUHJvbWlzZS5hbGwoaG90c3dhcHBhYmxlQ2hhbmdlcy5tYXAoaG90c3dhcE9wZXJhdGlvbiA9PiBsaW1pdCgoKSA9PiB7XG4gICAgcmV0dXJuIGFwcGx5SG90c3dhcE9wZXJhdGlvbihzZGssIGlvU3BhbiwgaG90c3dhcE9wZXJhdGlvbik7XG4gIH0pKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5SG90c3dhcE9wZXJhdGlvbihzZGs6IFNESywgaW9TcGFuOiBJTWVzc2FnZVNwYW48YW55PiwgaG90c3dhcE9wZXJhdGlvbjogSG90c3dhcE9wZXJhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBub3RlIHRoZSB0eXBlIG9mIHNlcnZpY2UgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IGhvdHN3YXBwZWQgaW4gdGhlIFVzZXItQWdlbnRcbiAgY29uc3QgY3VzdG9tVXNlckFnZW50ID0gYGNkay1ob3Rzd2FwL3N1Y2Nlc3MtJHtob3Rzd2FwT3BlcmF0aW9uLnNlcnZpY2V9YDtcbiAgc2RrLmFwcGVuZEN1c3RvbVVzZXJBZ2VudChjdXN0b21Vc2VyQWdlbnQpO1xuICBjb25zdCByZXNvdXJjZVRleHQgPSAocjogQWZmZWN0ZWRSZXNvdXJjZSkgPT4gci5kZXNjcmlwdGlvbiA/PyBgJHtyLnJlc291cmNlVHlwZX0gJyR7ci5waHlzaWNhbE5hbWUgPz8gci5sb2dpY2FsSWR9J2A7XG5cbiAgYXdhaXQgaW9TcGFuLm5vdGlmeShJTy5DREtfVE9PTEtJVF9JNTQwMi5tc2coXG4gICAgaG90c3dhcE9wZXJhdGlvbi5jaGFuZ2UucmVzb3VyY2VzLm1hcChyID0+IGZvcm1hdChgICAgJHtJQ09OfSAlc2AsIGNoYWxrLmJvbGQocmVzb3VyY2VUZXh0KHIpKSkpLmpvaW4oJ1xcbicpLFxuICAgIGhvdHN3YXBPcGVyYXRpb24uY2hhbmdlLFxuICApKTtcblxuICAvLyBpZiB0aGUgU0RLIGNhbGwgZmFpbHMsIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duIGJ5IHRoZSBTREtcbiAgLy8gYW5kIHdpbGwgcHJldmVudCB0aGUgZ3JlZW4gJ2hvdHN3YXBwZWQhJyB0ZXh0IGZyb20gYmVpbmcgZGlzcGxheWVkXG4gIHRyeSB7XG4gICAgYXdhaXQgaG90c3dhcE9wZXJhdGlvbi5hcHBseShzZGspO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBpZiAoZS5uYW1lID09PSAnVGltZW91dEVycm9yJyB8fCBlLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgY29uc3QgcmVzdWx0OiBXYWl0ZXJSZXN1bHQgPSBKU09OLnBhcnNlKGZvcm1hdEVycm9yTWVzc2FnZShlKSk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBUb29sa2l0RXJyb3IoJ0hvdHN3YXBXYWl0ZXJGYWlsZWQnLCBmb3JtYXRXYWl0ZXJFcnJvclJlc3VsdChyZXN1bHQpKTtcbiAgICAgIGVycm9yLm5hbWUgPSBlLm5hbWU7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIGF3YWl0IGlvU3Bhbi5ub3RpZnkoSU8uQ0RLX1RPT0xLSVRfSTU0MDMubXNnKFxuICAgIGhvdHN3YXBPcGVyYXRpb24uY2hhbmdlLnJlc291cmNlcy5tYXAociA9PiBmb3JtYXQoYCAgICR7SUNPTn0gJXMgJXNgLCBjaGFsay5ib2xkKHJlc291cmNlVGV4dChyKSksIGNoYWxrLmdyZWVuKCdob3Rzd2FwcGVkIScpKSkuam9pbignXFxuJyksXG4gICAgaG90c3dhcE9wZXJhdGlvbi5jaGFuZ2UsXG4gICkpO1xuXG4gIHNkay5yZW1vdmVDdXN0b21Vc2VyQWdlbnQoY3VzdG9tVXNlckFnZW50KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2FpdGVyRXJyb3JSZXN1bHQocmVzdWx0OiBXYWl0ZXJSZXN1bHQpIHtcbiAgY29uc3QgbWFpbiA9IFtcbiAgICBgUmVzb3VyY2UgaXMgbm90IGluIHRoZSBleHBlY3RlZCBzdGF0ZSBkdWUgdG8gd2FpdGVyIHN0YXR1czogJHtyZXN1bHQuc3RhdGV9YCxcbiAgICByZXN1bHQucmVhc29uID8gYCR7cmVzdWx0LnJlYXNvbn0uYCA6ICcnLFxuICBdLmpvaW4oJy4gJyk7XG5cbiAgaWYgKHJlc3VsdC5vYnNlcnZlZFJlc3BvbnNlcyAhPSBudWxsKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZWRSZXNwb25zZXMgPSBPYmplY3RcbiAgICAgIC5lbnRyaWVzKHJlc3VsdC5vYnNlcnZlZFJlc3BvbnNlcylcbiAgICAgIC5tYXAoKFttc2csIGNvdW50XSkgPT4gYCAgLSAke21zZ30gKCR7Y291bnR9KWApXG4gICAgICAuam9pbignXFxuJyk7XG5cbiAgICByZXR1cm4gYCR7bWFpbn0gT2JzZXJ2ZWQgcmVzcG9uc2VzOlxcbiR7b2JzZXJ2ZWRSZXNwb25zZXN9YDtcbiAgfVxuXG4gIHJldHVybiBtYWluO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2dSZWplY3RlZENoYW5nZXMoXG4gIGlvU3BhbjogSU1lc3NhZ2VTcGFuPGFueT4sXG4gIHJlamVjdGVkQ2hhbmdlczogUmVqZWN0ZWRDaGFuZ2VbXSxcbiAgaG90c3dhcE1vZGU6IEhvdHN3YXBNb2RlLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChyZWplY3RlZENoYW5nZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8qKlxuICAgKiBFS1MgU2VydmljZXMgY2FuIGhhdmUgYSB0YXNrIGRlZmluaXRpb24gdGhhdCBkb2Vzbid0IHJlZmVyIHRvIHRoZSB0YXNrIGRlZmluaXRpb24gYmVpbmcgdXBkYXRlZC5cbiAgICogV2UgaGF2ZSB0byBsb2cgdGhpcyBhcyBhIG5vbi1ob3Rzd2FwcGFibGUgY2hhbmdlIHRvIHRoZSB0YXNrIGRlZmluaXRpb24sIGJ1dCB3aGVuIHdlIGRvLFxuICAgKiB3ZSB3aW5kIHVwIGhvdHN3YXBwaW5nIHRoZSB0YXNrIGRlZmluaXRpb24gYW5kIGxvZ2dpbmcgaXQgYXMgYSBub24taG90c3dhcHBhYmxlIGNoYW5nZS5cbiAgICpcbiAgICogVGhpcyBsb2dpYyBwcmV2ZW50cyB1cyBmcm9tIGxvZ2dpbmcgdGhhdCBjaGFuZ2UgYXMgbm9uLWhvdHN3YXBwYWJsZSB3aGVuIHdlIGhvdHN3YXAgaXQuXG4gICAqL1xuICBpZiAoaG90c3dhcE1vZGUgPT09ICdob3Rzd2FwLW9ubHknKSB7XG4gICAgcmVqZWN0ZWRDaGFuZ2VzID0gcmVqZWN0ZWRDaGFuZ2VzLmZpbHRlcigoY2hhbmdlKSA9PiBjaGFuZ2UuaG90c3dhcE9ubHlWaXNpYmxlID09PSB0cnVlKTtcblxuICAgIGlmIChyZWplY3RlZENoYW5nZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZXMgPSBbJyddOyAvLyBzdGFydCB3aXRoIGVtcHR5IGxpbmVcblxuICBpZiAoaG90c3dhcE1vZGUgPT09ICdob3Rzd2FwLW9ubHknKSB7XG4gICAgbWVzc2FnZXMucHVzaChmb3JtYXQoJyVzICVzJywgY2hhbGsucmVkKCfimqDvuI8nKSwgY2hhbGsucmVkKCdUaGUgZm9sbG93aW5nIG5vbi1ob3Rzd2FwcGFibGUgY2hhbmdlcyB3ZXJlIGZvdW5kLiBUbyByZWNvbmNpbGUgdGhlc2UgdXNpbmcgQ2xvdWRGb3JtYXRpb24sIHNwZWNpZnkgLS1ob3Rzd2FwLWZhbGxiYWNrJykpKTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlcy5wdXNoKGZvcm1hdCgnJXMgJXMnLCBjaGFsay5yZWQoJ+KaoO+4jycpLCBjaGFsay5yZWQoJ1RoZSBmb2xsb3dpbmcgbm9uLWhvdHN3YXBwYWJsZSBjaGFuZ2VzIHdlcmUgZm91bmQ6JykpKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgeyBjaGFuZ2UgfSBvZiByZWplY3RlZENoYW5nZXMpIHtcbiAgICBtZXNzYWdlcy5wdXNoKCcgICAgJyArIG5vbkhvdHN3YXBwYWJsZUNoYW5nZU1lc3NhZ2UoY2hhbmdlKSk7XG4gIH1cbiAgbWVzc2FnZXMucHVzaCgnJyk7IC8vIG5ld2xpbmVcblxuICBhd2FpdCBpb1NwYW4uZGVmYXVsdHMuaW5mbyhtZXNzYWdlcy5qb2luKCdcXG4nKSk7XG59XG5cbi8qKlxuICogRm9ybWF0cyBhIE5vbkhvdHN3YXBwYWJsZUNoYW5nZVxuICovXG5mdW5jdGlvbiBub25Ib3Rzd2FwcGFibGVDaGFuZ2VNZXNzYWdlKGNoYW5nZTogTm9uSG90c3dhcHBhYmxlQ2hhbmdlKTogc3RyaW5nIHtcbiAgY29uc3Qgc3ViamVjdCA9IGNoYW5nZS5zdWJqZWN0O1xuICBjb25zdCByZWFzb24gPSBjaGFuZ2UuZGVzY3JpcHRpb24gPz8gY2hhbmdlLnJlYXNvbjtcblxuICBzd2l0Y2ggKHN1YmplY3QudHlwZSkge1xuICAgIGNhc2UgJ091dHB1dCc6XG4gICAgICByZXR1cm4gZm9ybWF0KFxuICAgICAgICAnb3V0cHV0OiAlcywgcmVhc29uOiAlcycsXG4gICAgICAgIGNoYWxrLmJvbGQoc3ViamVjdC5sb2dpY2FsSWQpLFxuICAgICAgICBjaGFsay5yZWQocmVhc29uKSxcbiAgICAgICk7XG4gICAgY2FzZSAnUmVzb3VyY2UnOlxuICAgICAgcmV0dXJuIG5vbkhvdHN3YXBwYWJsZVJlc291cmNlTWVzc2FnZShzdWJqZWN0LCByZWFzb24pO1xuICB9XG59XG5cbi8qKlxuICogRm9ybWF0cyBhIG5vbi1ob3Rzd2FwcGFibGUgcmVzb3VyY2Ugc3ViamVjdFxuICovXG5mdW5jdGlvbiBub25Ib3Rzd2FwcGFibGVSZXNvdXJjZU1lc3NhZ2Uoc3ViamVjdDogUmVzb3VyY2VTdWJqZWN0LCByZWFzb246IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChzdWJqZWN0LnJlamVjdGVkUHJvcGVydGllcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZvcm1hdChcbiAgICAgICdyZXNvdXJjZTogJXMsIHR5cGU6ICVzLCByZWplY3RlZCBjaGFuZ2VzOiAlcywgcmVhc29uOiAlcycsXG4gICAgICBjaGFsay5ib2xkKHN1YmplY3QubG9naWNhbElkKSxcbiAgICAgIGNoYWxrLmJvbGQoc3ViamVjdC5yZXNvdXJjZVR5cGUpLFxuICAgICAgY2hhbGsuYm9sZChzdWJqZWN0LnJlamVjdGVkUHJvcGVydGllcyksXG4gICAgICBjaGFsay5yZWQocmVhc29uKSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGZvcm1hdChcbiAgICAncmVzb3VyY2U6ICVzLCB0eXBlOiAlcywgcmVhc29uOiAlcycsXG4gICAgY2hhbGsuYm9sZChzdWJqZWN0LmxvZ2ljYWxJZCksXG4gICAgY2hhbGsuYm9sZChzdWJqZWN0LnJlc291cmNlVHlwZSksXG4gICAgY2hhbGsucmVkKHJlYXNvbiksXG4gICk7XG59XG4iXX0=
|
|
488
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC1kZXBsb3ltZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvdHN3YXAtZGVwbG95bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErR0Esb0RBMENDO0FBekpELCtCQUE4QjtBQUU5Qix5REFBeUQ7QUFFekQsK0JBQStCO0FBQy9CLDZDQUF1RDtBQUN2RCxxQ0FBZ0Q7QUFHaEQsc0RBQXdHO0FBQ3hHLDJFQUEwRTtBQUMxRSwrREFBNkU7QUFPN0UscUNBR2tCO0FBQ2xCLGlEQUFnRTtBQUNoRSxxRUFBK0Y7QUFDL0YseURBQXdFO0FBQ3hFLG1FQUdpQztBQUVqQywrREFBMkQ7QUFFM0QsMkNBQXlDO0FBRXpDLHNDQUFpQztBQUNqQyxxRUFBNEU7QUFFNUUsNkVBQTZFO0FBQzdFLDRHQUE0RztBQUM1RyxNQUFNLE1BQU0sR0FBNkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBVzVELE1BQU0sa0JBQWtCLEdBQXVDO0lBQzdELFNBQVM7SUFDVCx1QkFBdUIsRUFBRSxxREFBa0M7SUFDM0Qsc0JBQXNCLEVBQUUscURBQWtDO0lBQzFELG9CQUFvQixFQUFFLHFEQUFrQztJQUV4RCxVQUFVO0lBQ1Ysd0JBQXdCLEVBQUUsdURBQTJCO0lBQ3JELHFDQUFxQyxFQUFFLHVEQUEyQjtJQUNsRSw2QkFBNkIsRUFBRSx1REFBMkI7SUFDMUQsc0JBQXNCLEVBQUUsdURBQTJCO0lBRW5ELDBCQUEwQixFQUFFLDZDQUE4QjtJQUMxRCx5QkFBeUIsRUFBRSwwREFBb0M7SUFDL0QsNkJBQTZCLEVBQUUsOERBQXNDO0lBQ3JFLGtCQUFrQixFQUFFLEtBQUssRUFDdkIsU0FBaUIsRUFDakIsTUFBc0IsRUFDdEIsbUJBQW1ELEVBQ3pCLEVBQUU7UUFDNUIsNEVBQTRFO1FBQzVFLElBQUksTUFBTSxJQUFBLGlFQUF5QyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQzVGLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sQ0FBQyxJQUFBLGdDQUF1QixFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELG9CQUFvQixFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRTtJQUVwQyw0QkFBNEI7SUFDNUIsMEJBQTBCLEVBQUUseURBQWdDO0lBQzVELDZCQUE2QixFQUFFLHlEQUFnQztJQUMvRCx5QkFBeUIsRUFBRSx5REFBZ0M7SUFDM0Qsd0JBQXdCLEVBQUUseURBQWdDO0lBQzFELGdDQUFnQyxFQUFFLHlEQUFnQztJQUNsRSxxQkFBcUIsRUFBRSx5REFBZ0M7SUFDdkQsbUJBQW1CLEVBQUUseURBQWdDO0lBQ3JELHNCQUFzQixFQUFFLHlEQUFnQztJQUN4RCw0QkFBNEIsRUFBRSx5REFBZ0M7SUFDOUQsaUJBQWlCLEVBQUUseURBQWdDO0lBQ25ELHdCQUF3QixFQUFFLHlEQUFnQztJQUMxRCxpQ0FBaUMsRUFBRSx5REFBZ0M7SUFDbkUsNEJBQTRCLEVBQUUseURBQWdDO0lBQzlELGtDQUFrQyxFQUFFLHlEQUFnQztJQUNwRSxnQ0FBZ0MsRUFBRSx5REFBZ0M7SUFFbEUsYUFBYTtJQUNiLDRCQUE0QixFQUFFLHlEQUFnQztJQUM5RCwyQkFBMkIsRUFBRSx5REFBZ0M7SUFDN0QsMkJBQTJCLEVBQUUseURBQWdDO0lBQzdELDBCQUEwQixFQUFFLHlEQUFnQztJQUM1RCw2QkFBNkIsRUFBRSx5REFBZ0M7Q0FDaEUsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLG9CQUFvQixDQUN4QyxXQUF3QixFQUN4QixRQUFrQixFQUNsQixXQUFzQyxFQUN0QyxtQkFBd0MsRUFDeEMsYUFBZ0QsRUFDaEQsV0FBd0IsRUFDeEIsd0JBQWtEO0lBRWxELE1BQU0sV0FBVyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzFELEtBQUssRUFBRSxhQUFhO1FBQ3BCLElBQUksRUFBRSxXQUFXO0tBQ2xCLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxHQUFHLE1BQU0saUJBQWlCLENBQ3BDLFdBQVcsRUFDWCxXQUFXLEVBQ1gsV0FBVyxFQUNYLGFBQWEsRUFDYixXQUFXLEVBQ1gsd0JBQXdCLENBQ3pCLENBQUM7SUFFRixNQUFNLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFOUIsZ0ZBQWdGO0lBQ2hGLDhFQUE4RTtJQUM5RSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksTUFBTSxFQUFFLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxPQUFPO1lBQ0wsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixJQUFJLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQzdDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxPQUFPO1lBQ3JDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxPQUFPO1lBQ3BDLGNBQWMsRUFBRSxFQUFFO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7R0FHRztBQUNILEtBQUssVUFBVSxpQkFBaUIsQ0FDOUIsV0FBd0IsRUFDeEIsTUFBeUIsRUFDekIsV0FBc0MsRUFDdEMsS0FBd0MsRUFDeEMsV0FBd0IsRUFDeEIsd0JBQWtEO0lBRWxELDJGQUEyRjtJQUMzRixNQUFNLFdBQVcsR0FBRyxNQUFNLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUUsOEdBQThHO0lBQzlHLGtHQUFrRztJQUNsRyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsYUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBRWpGLGtFQUFrRTtJQUNsRSx1RkFBdUY7SUFDdkYsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFBLGlEQUF3QixFQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9HLE1BQU0sZUFBZSxHQUFHLFlBQVksSUFBSSxNQUFNLElBQUEsb0RBQW1DLEVBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTlGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSwrQ0FBOEIsQ0FBQztRQUM3RCxhQUFhLEVBQUUsS0FBSztRQUNwQixVQUFVLEVBQUUsV0FBVztRQUN2QixPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87UUFDNUIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO1FBQzFCLFNBQVMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsU0FBUztRQUNqRCxHQUFHO1FBQ0gsWUFBWSxFQUFFLGVBQWUsQ0FBQyxZQUFZO0tBQzNDLENBQUMsQ0FBQztJQUVILE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3RixNQUFNLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxHQUFHLE1BQU0sdUJBQXVCLENBQ3JFLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsR0FBRyxFQUNILGVBQWUsQ0FBQyxZQUFZLEVBQUUsd0JBQXdCLENBQ3ZELENBQUM7SUFFRixNQUFNLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFL0QsTUFBTSxtQkFBbUIsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVELE1BQU0sc0JBQXNCLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVsRSxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRTtRQUNuRSxLQUFLO1FBQ0wsSUFBSSxFQUFFLFdBQVc7UUFDakIsbUJBQW1CO1FBQ25CLHNCQUFzQjtLQUN2QixDQUFDLENBQUMsQ0FBQztJQUVKLG9DQUFvQztJQUNwQyxJQUFJLFdBQVcsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFJLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxPQUFPO2dCQUNMLEtBQUs7Z0JBQ0wsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixlQUFlLEVBQUUsSUFBSTtnQkFDckIsbUJBQW1CO2dCQUNuQixzQkFBc0I7YUFDdkIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsc0NBQXNDO0lBQ3RDLElBQUksS0FBd0IsQ0FBQztJQUM3QixJQUFJLENBQUM7UUFDSCxNQUFNLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDM0Qsc0VBQXNFO1FBQ3RFLE1BQU0sSUFBQSxrREFBeUIsRUFBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNILENBQUM7SUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1FBQ2hCLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRUQsT0FBTztRQUNMLEtBQUs7UUFDTCxJQUFJLEVBQUUsV0FBVztRQUNqQixVQUFVLEVBQUUsQ0FBQyxLQUFLO1FBQ2xCLGVBQWUsRUFBRSxLQUFLO1FBQ3RCLG1CQUFtQjtRQUNuQixzQkFBc0I7UUFDdEIsS0FBSztLQUNOLENBQUM7QUFDSixDQUFDO0FBT0Q7OztHQUdHO0FBQ0gsS0FBSyxVQUFVLHVCQUF1QixDQUNwQyxZQUFtQyxFQUNuQyxtQkFBbUQsRUFDbkQsR0FBUSxFQUNSLGdCQUFxRSxFQUNyRSx3QkFBa0Q7SUFFbEQsTUFBTSxtQkFBbUIsR0FBRywyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV0RSxNQUFNLFFBQVEsR0FBMEMsRUFBRSxDQUFDO0lBQzNELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxLQUFLLEVBQW9CLENBQUM7SUFDNUQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLEtBQUssRUFBa0IsQ0FBQztJQUM3RCxNQUFNLGdCQUFnQixHQUFzQyxFQUFFLENBQUM7SUFDL0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXpCLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbEUsd0JBQXdCLENBQUMsSUFBSSxDQUFDO1lBQzVCLFlBQVksRUFBRSxLQUFLO1lBQ25CLE1BQU0sRUFBRTtnQkFDTixNQUFNLEVBQUUsZ0NBQXFCLENBQUMsTUFBTTtnQkFDcEMsV0FBVyxFQUFFLG9CQUFvQjtnQkFDakMsT0FBTyxFQUFFO29CQUNQLElBQUksRUFBRSxRQUFRO29CQUNkLFNBQVM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7aUJBQ3JEO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsK0NBQStDO0lBQy9DLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztRQUN0RSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxLQUFLLDRCQUE0QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxLQUFLLDRCQUE0QixFQUFFLENBQUM7WUFDckgsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyw2QkFBNkIsQ0FDN0QsU0FBUyxFQUNULE1BQU0sRUFDTixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLEdBQUcsRUFDSCx3QkFBd0IsQ0FDekIsQ0FBQyxDQUFDLENBQUM7WUFDSixTQUFTO1FBQ1gsQ0FBQztRQUVELE1BQU0sMkJBQTJCLEdBQUcseUJBQXlCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3RHLHNGQUFzRjtRQUN0RixJQUFJLGNBQWMsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDOUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUVELFNBQVM7UUFDWCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQVcsMkJBQTJCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2RSxJQUFJLFlBQVksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3ZDLHdFQUF3RTtZQUN4RSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUNqQixrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLEVBQUUsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLENBQUMsQ0FDeEgsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUEsZ0NBQXVCLEVBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7SUFDSCxDQUFDO0lBRUQsNERBQTREO0lBQzVELHdFQUF3RTtJQUN4RSxNQUFNLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxRCxLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ25DLHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELE1BQU0sdUJBQXVCLEdBQTJCLEVBQUUsQ0FBQztJQUMzRCx3RUFBd0U7SUFDeEUsTUFBTSxlQUFlLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0UsS0FBSyxNQUFNLHVCQUF1QixJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3RELHVCQUF1QixDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxLQUFLLE1BQU0sd0JBQXdCLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUMvRCxLQUFLLE1BQU0sY0FBYyxJQUFJLHdCQUF3QixFQUFFLENBQUM7WUFDdEQsY0FBYyxDQUFDLFlBQVk7Z0JBQ3pCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUM1QyxDQUFDLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLFlBQVksRUFBRSxxQkFBcUI7UUFDbkMsZUFBZSxFQUFFLHdCQUF3QjtLQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLDJCQUEyQixDQUFDLFlBQW1DO0lBR3RFLGlFQUFpRTtJQUNqRSxpR0FBaUc7SUFDakcsTUFBTSxrQkFBa0IsR0FBcUQsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDNUcsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3RixNQUFNLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakcsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7UUFDN0UsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztZQUNuQyx5Q0FBeUM7WUFDekMsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRTtnQkFDdkYsT0FBTyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUFDLENBQUM7WUFDSCwyREFBMkQ7WUFDM0QsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO2dCQUMzQixNQUFNLENBQUMsWUFBWSxFQUFFLHFCQUFxQixDQUFDLEdBQUcsc0JBQXNCLENBQUM7Z0JBQ3JFLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxHQUFHLG9CQUFvQixDQUFDLHFCQUFxQixFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNyRix1REFBdUQ7Z0JBQ3ZELE9BQU8saUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsNkRBQTZEO0lBQzdELHNDQUFzQztJQUN0Qyx1REFBdUQ7SUFDdkQsT0FBTztRQUNMLEdBQUcsaUJBQWlCO1FBQ3BCLEdBQUcsb0JBQW9CO0tBQ3hCLENBQUM7QUFDSixDQUFDO0FBRUQseUhBQXlIO0FBQ3pILFNBQVMsVUFBVSxDQUFJLElBQTBCLEVBQUUsSUFBdUI7SUFDeEUsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FDaEMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNoQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1osR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFDRCxFQUEwQixDQUMzQixDQUFDO0FBQ0osQ0FBQztBQUVELDJEQUEyRDtBQUMzRCxLQUFLLFVBQVUsNkJBQTZCLENBQzFDLFNBQWlCLEVBQ2pCLE1BQW1DLEVBQ25DLG9CQUF5RSxFQUN6RSxtQkFBbUQsRUFDbkQsR0FBUSxFQUNSLHdCQUFrRDtJQUVsRCxNQUFNLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlCLE9BQU87WUFDTCxZQUFZLEVBQUUsRUFBRTtZQUNoQixlQUFlLEVBQUU7Z0JBQ2Y7b0JBQ0UsWUFBWSxFQUFFLEtBQUs7b0JBQ25CLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsZ0NBQXFCLENBQUMscUJBQXFCO3dCQUNuRCxXQUFXLEVBQUUsa0RBQWtEO3dCQUMvRCxPQUFPLEVBQUU7NEJBQ1AsSUFBSSxFQUFFLFVBQVU7NEJBQ2hCLFNBQVM7NEJBQ1QsWUFBWSxFQUFFLDRCQUE0Qjs0QkFDMUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7eUJBQ3JEO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0seUJBQXlCLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQywwQ0FBMEMsQ0FDcEcsV0FBVyxDQUFDLFlBQVksRUFDeEIsV0FBVyxDQUFDLGlCQUFpQixFQUM3QixNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQ3hDLENBQUM7SUFFRixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUNsQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxnQkFBZ0IsRUFDaEQsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsaUJBQWlCLENBQ2xELENBQUM7SUFFRixPQUFPLHVCQUF1QixDQUM1QixVQUFVLEVBQ1YseUJBQXlCLEVBQ3pCLEdBQUcsRUFDSCxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxvQkFBb0IsRUFDcEQsd0JBQXdCLENBQ3pCLENBQUM7QUFDSixDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLFNBQVMseUJBQXlCLENBQ2hDLFNBQXNDLEVBQ3RDLFNBQXNDO0lBRXRDLE9BQU8sQ0FDTCxTQUFTLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxlQUFlO1FBQ3ZELG9HQUFvRztRQUNwRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FDcEYsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUMzQixTQUFzQyxFQUN0QyxTQUFzQztJQUV0QyxPQUFPLElBQUksUUFBUSxDQUFDLGtCQUFrQjtJQUNwQywyR0FBMkc7SUFDM0csU0FBUyxDQUFDLFFBQVEsRUFDbEIsU0FBUyxDQUFDLFFBQVEsRUFDbEI7UUFDRSxZQUFZLEVBQUU7WUFDWixPQUFPLEVBQUUsU0FBUyxDQUFDLGVBQWU7WUFDbEMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxlQUFlO1NBQ25DO1FBQ0QsYUFBYSxFQUFHLFNBQWlCLENBQUMsYUFBYTtRQUMvQyxVQUFVLEVBQUcsU0FBaUIsQ0FBQyxVQUFVO0tBQzFDLENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FDaEMsU0FBaUIsRUFDakIsTUFBbUMsRUFDbkMsbUJBQW1EO0lBRW5ELCtGQUErRjtJQUMvRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLE9BQU87WUFDTCxZQUFZLEVBQUUsS0FBSztZQUNuQixNQUFNLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLGdDQUFxQixDQUFDLGlCQUFpQjtnQkFDL0MsV0FBVyxFQUFFLGFBQWEsU0FBUyxrQ0FBa0M7Z0JBQ3JFLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsU0FBUztvQkFDVCxZQUFZLEVBQUUsTUFBTSxDQUFDLFFBQVMsQ0FBQyxJQUFJO29CQUNuQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztpQkFDckQ7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO1NBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPO1lBQ0wsWUFBWSxFQUFFLEtBQUs7WUFDbkIsU0FBUztZQUNULE1BQU0sRUFBRTtnQkFDTixNQUFNLEVBQUUsZ0NBQXFCLENBQUMsaUJBQWlCO2dCQUMvQyxXQUFXLEVBQUUsYUFBYSxTQUFTLG9DQUFvQztnQkFDdkUsT0FBTyxFQUFFO29CQUNQLElBQUksRUFBRSxVQUFVO29CQUNoQixTQUFTO29CQUNULFlBQVksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUk7b0JBQ2xDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO2lCQUNyRDthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xELE9BQU87WUFDTCxZQUFZLEVBQUUsS0FBSztZQUNuQixNQUFNLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLGdDQUFxQixDQUFDLHFCQUFxQjtnQkFDbkQsV0FBVyxFQUFFLGFBQWEsU0FBUyxnQ0FBZ0MsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLFNBQVMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUc7Z0JBQ3pILE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsU0FBUztvQkFDVCxZQUFZLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJO29CQUNsQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztpQkFDckQ7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLFNBQVM7UUFDVCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtRQUN2QyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztLQUNyRCxDQUFDO0FBQ0osQ0FBQztBQUVELEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxHQUFRLEVBQUUsTUFBeUIsRUFBRSxtQkFBdUM7SUFDbkgsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssYUFBSSx5QkFBeUIsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6Qix3RUFBd0U7SUFDeEUsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUN4RSxPQUFPLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsS0FBSyxVQUFVLHFCQUFxQixDQUFDLEdBQVEsRUFBRSxNQUF5QixFQUFFLGdCQUFrQztJQUMxRyw4RUFBOEU7SUFDOUUsTUFBTSxlQUFlLEdBQUcsdUJBQXVCLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzFFLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMzQyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDO0lBRXRILE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFFLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUMxQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUEsYUFBTSxFQUFDLE1BQU0sYUFBSSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUMzRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ3hCLENBQUMsQ0FBQztJQUVILDREQUE0RDtJQUM1RCxxRUFBcUU7SUFDckUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLGNBQWMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ3pELE1BQU0sTUFBTSxHQUFpQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUEseUJBQWtCLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRCxNQUFNLEtBQUssR0FBRyxJQUFJLDRCQUFZLENBQUMscUJBQXFCLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN2RixLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDcEIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQzFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBQSxhQUFNLEVBQUMsTUFBTSxhQUFJLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDMUksZ0JBQWdCLENBQUMsTUFBTSxDQUN4QixDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsTUFBb0I7SUFDbkQsTUFBTSxJQUFJLEdBQUc7UUFDWCwrREFBK0QsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUM3RSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtLQUN6QyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUViLElBQUksTUFBTSxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JDLE1BQU0saUJBQWlCLEdBQUcsTUFBTTthQUM3QixPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO2FBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQzthQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFZCxPQUFPLEdBQUcsSUFBSSx5QkFBeUIsaUJBQWlCLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsS0FBSyxVQUFVLGtCQUFrQixDQUMvQixNQUF5QixFQUN6QixlQUFpQyxFQUNqQyxXQUF3QjtJQUV4QixJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakMsT0FBTztJQUNULENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxJQUFJLFdBQVcsS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUNuQyxlQUFlLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixLQUFLLElBQUksQ0FBQyxDQUFDO1FBRXpGLElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsd0JBQXdCO0lBRS9DLElBQUksV0FBVyxLQUFLLGNBQWMsRUFBRSxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBQSxhQUFNLEVBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyx3SEFBd0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2TCxDQUFDO1NBQU0sQ0FBQztRQUNOLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBQSxhQUFNLEVBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuSCxDQUFDO0lBRUQsS0FBSyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksZUFBZSxFQUFFLENBQUM7UUFDekMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVU7SUFFN0IsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyw0QkFBNEIsQ0FBQyxNQUE2QjtJQUNqRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUVuRCxRQUFRLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixLQUFLLFFBQVE7WUFDWCxPQUFPLElBQUEsYUFBTSxFQUNYLHdCQUF3QixFQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFDN0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FDbEIsQ0FBQztRQUNKLEtBQUssVUFBVTtZQUNiLE9BQU8sOEJBQThCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNELENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLDhCQUE4QixDQUFDLE9BQXdCLEVBQUUsTUFBYztJQUM5RSxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN2QyxPQUFPLElBQUEsYUFBTSxFQUNYLDBEQUEwRCxFQUMxRCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ3RDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxJQUFBLGFBQU0sRUFDWCxvQ0FBb0MsRUFDcEMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQzdCLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUNoQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUNsQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0ICogYXMgY2ZuX2RpZmYgZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSB7IFdhaXRlclJlc3VsdCB9IGZyb20gJ0BzbWl0aHkvdXRpbC13YWl0ZXInO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgTm9uSG90c3dhcHBhYmxlUmVhc29uIH0gZnJvbSAnLi4vLi4vcGF5bG9hZHMnO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IFNESywgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25TdGFjaywgTmVzdGVkU3RhY2tUZW1wbGF0ZXMgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBsb2FkQ3VycmVudFRlbXBsYXRlV2l0aE5lc3RlZFN0YWNrcywgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlIH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgaXNIb3Rzd2FwcGFibGVBcHBTeW5jQ2hhbmdlIH0gZnJvbSAnLi9hcHBzeW5jLW1hcHBpbmctdGVtcGxhdGVzJztcbmltcG9ydCB7IGlzSG90c3dhcHBhYmxlQ29kZUJ1aWxkUHJvamVjdENoYW5nZSB9IGZyb20gJy4vY29kZS1idWlsZC1wcm9qZWN0cyc7XG5pbXBvcnQgdHlwZSB7XG4gIEhvdHN3YXBDaGFuZ2UsXG4gIEhvdHN3YXBPcGVyYXRpb24sXG4gIFJlamVjdGVkQ2hhbmdlLFxuICBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsXG59IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7XG4gIElDT04sXG4gIG5vbkhvdHN3YXBwYWJsZVJlc291cmNlLFxufSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBpc0hvdHN3YXBwYWJsZUVjc1NlcnZpY2VDaGFuZ2UgfSBmcm9tICcuL2Vjcy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyByZWFkSG90c3dhcFRlbXBsYXRlQ2FjaGUsIHdyaXRlSG90c3dhcFRlbXBsYXRlQ2FjaGUgfSBmcm9tICcuL2hvdHN3YXAtdGVtcGxhdGUtY2FjaGUnO1xuaW1wb3J0IHsgaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZSB9IGZyb20gJy4vbGFtYmRhLWZ1bmN0aW9ucyc7XG5pbXBvcnQge1xuICBza2lwQ2hhbmdlRm9yUzNEZXBsb3lDdXN0b21SZXNvdXJjZVBvbGljeSxcbiAgaXNIb3Rzd2FwcGFibGVTM0J1Y2tldERlcGxveW1lbnRDaGFuZ2UsXG59IGZyb20gJy4vczMtYnVja2V0LWRlcGxveW1lbnRzJztcbmltcG9ydCB0eXBlIHsgQWZmZWN0ZWRSZXNvdXJjZSwgSG90c3dhcFJlc3VsdCwgUmVzb3VyY2VTdWJqZWN0LCBSZXNvdXJjZUNoYW5nZSwgTm9uSG90c3dhcHBhYmxlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vcGF5bG9hZHMnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB0eXBlIHsgU3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi4vZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgSU8sIFNQQU4gfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSU1lc3NhZ2VTcGFuLCBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgTW9kZSB9IGZyb20gJy4uL3BsdWdpbic7XG5pbXBvcnQgeyBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSB9IGZyb20gJy4vY2xvdWQtY29udHJvbC1yZXNvdXJjZSc7XG5cbi8vIE11c3QgdXNlIGEgcmVxdWlyZSgpIG90aGVyd2lzZSBlc2J1aWxkIGNvbXBsYWlucyBhYm91dCBjYWxsaW5nIGEgbmFtZXNwYWNlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyxAdHlwZXNjcmlwdC1lc2xpbnQvY29uc2lzdGVudC10eXBlLWltcG9ydHNcbmNvbnN0IHBMaW1pdDogdHlwZW9mIGltcG9ydCgncC1saW1pdCcpID0gcmVxdWlyZSgncC1saW1pdCcpO1xuXG50eXBlIEhvdHN3YXBEZXRlY3RvciA9IChcbiAgbG9naWNhbElkOiBzdHJpbmcsXG4gIGNoYW5nZTogUmVzb3VyY2VDaGFuZ2UsXG4gIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbiAgaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzOiBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsXG4pID0+IFByb21pc2U8SG90c3dhcENoYW5nZVtdPjtcblxudHlwZSBIb3Rzd2FwTW9kZSA9ICdob3Rzd2FwLW9ubHknIHwgJ2ZhbGwtYmFjayc7XG5cbmNvbnN0IFJFU09VUkNFX0RFVEVDVE9SUzogeyBba2V5OiBzdHJpbmddOiBIb3Rzd2FwRGV0ZWN0b3IgfSA9IHtcbiAgLy8gTGFtYmRhXG4gICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nOiBpc0hvdHN3YXBwYWJsZUxhbWJkYUZ1bmN0aW9uQ2hhbmdlLFxuICAnQVdTOjpMYW1iZGE6OlZlcnNpb24nOiBpc0hvdHN3YXBwYWJsZUxhbWJkYUZ1bmN0aW9uQ2hhbmdlLFxuICAnQVdTOjpMYW1iZGE6OkFsaWFzJzogaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZSxcblxuICAvLyBBcHBTeW5jXG4gICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJzogaXNIb3Rzd2FwcGFibGVBcHBTeW5jQ2hhbmdlLFxuICAnQVdTOjpBcHBTeW5jOjpGdW5jdGlvbkNvbmZpZ3VyYXRpb24nOiBpc0hvdHN3YXBwYWJsZUFwcFN5bmNDaGFuZ2UsXG4gICdBV1M6OkFwcFN5bmM6OkdyYXBoUUxTY2hlbWEnOiBpc0hvdHN3YXBwYWJsZUFwcFN5bmNDaGFuZ2UsXG4gICdBV1M6OkFwcFN5bmM6OkFwaUtleSc6IGlzSG90c3dhcHBhYmxlQXBwU3luY0NoYW5nZSxcblxuICAnQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uJzogaXNIb3Rzd2FwcGFibGVFY3NTZXJ2aWNlQ2hhbmdlLFxuICAnQVdTOjpDb2RlQnVpbGQ6OlByb2plY3QnOiBpc0hvdHN3YXBwYWJsZUNvZGVCdWlsZFByb2plY3RDaGFuZ2UsXG4gICdDdXN0b206OkNES0J1Y2tldERlcGxveW1lbnQnOiBpc0hvdHN3YXBwYWJsZVMzQnVja2V0RGVwbG95bWVudENoYW5nZSxcbiAgJ0FXUzo6SUFNOjpQb2xpY3knOiBhc3luYyAoXG4gICAgbG9naWNhbElkOiBzdHJpbmcsXG4gICAgY2hhbmdlOiBSZXNvdXJjZUNoYW5nZSxcbiAgICBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4gICk6IFByb21pc2U8SG90c3dhcENoYW5nZVtdPiA9PiB7XG4gICAgLy8gSWYgdGhlIHBvbGljeSBpcyBmb3IgYSBTM0J1Y2tldERlcGxveW1lbnRDaGFuZ2UsIHdlIGNhbiBpZ25vcmUgdGhlIGNoYW5nZVxuICAgIGlmIChhd2FpdCBza2lwQ2hhbmdlRm9yUzNEZXBsb3lDdXN0b21SZXNvdXJjZVBvbGljeShsb2dpY2FsSWQsIGNoYW5nZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW25vbkhvdHN3YXBwYWJsZVJlc291cmNlKGNoYW5nZSldO1xuICB9LFxuXG4gICdBV1M6OkNESzo6TWV0YWRhdGEnOiBhc3luYyAoKSA9PiBbXSxcblxuICAvLyBSZXNvdXJjZXMgdGhhdCB1c2UgQ0NBUElTXG4gICdBV1M6OkFwaUdhdGV3YXk6OlJlc3RBcGknOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudCc6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxuICAnQVdTOjpBcGlHYXRld2F5OjpNZXRob2QnOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6QXBpR2F0ZXdheVYyOjpBcGknOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvbic6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxuICAnQVdTOjpCZWRyb2NrOjpBZ2VudCc6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxuICAnQVdTOjpFdmVudHM6OlJ1bGUnOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6RHluYW1vREI6OlRhYmxlJzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG4gICdBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZSc6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxuICAnQVdTOjpTUVM6OlF1ZXVlJzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG4gICdBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtJzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG4gICdBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtJzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG4gICdBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZCc6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxuICAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZSc6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxuXG4gIC8vIFF1aWNrU2lnaHRcbiAgJ0FXUzo6UXVpY2tTaWdodDo6RGFzaGJvYXJkJzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG4gICdBV1M6OlF1aWNrU2lnaHQ6OkFuYWx5c2lzJzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG4gICdBV1M6OlF1aWNrU2lnaHQ6OlRlbXBsYXRlJzogaXNIb3Rzd2FwcGFibGVDbG91ZENvbnRyb2xDaGFuZ2UsXG4gICdBV1M6OlF1aWNrU2lnaHQ6OkRhdGFTZXQnOiBpc0hvdHN3YXBwYWJsZUNsb3VkQ29udHJvbENoYW5nZSxcbiAgJ0FXUzo6UXVpY2tTaWdodDo6RGF0YVNvdXJjZSc6IGlzSG90c3dhcHBhYmxlQ2xvdWRDb250cm9sQ2hhbmdlLFxufTtcblxuLyoqXG4gKiBQZXJmb3JtIGEgaG90c3dhcCBkZXBsb3ltZW50LCBzaG9ydC1jaXJjdWl0aW5nIENsb3VkRm9ybWF0aW9uIGlmIHBvc3NpYmxlLlxuICogSWYgaXQncyBub3QgcG9zc2libGUgdG8gc2hvcnQtY2lyY3VpdCB0aGUgZGVwbG95bWVudFxuICogKGJlY2F1c2UgdGhlIENESyBTdGFjayBjb250YWlucyBjaGFuZ2VzIHRoYXQgY2Fubm90IGJlIGRlcGxveWVkIHdpdGhvdXQgQ2xvdWRGb3JtYXRpb24pLFxuICogcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyeUhvdHN3YXBEZXBsb3ltZW50KFxuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgYXNzZXRQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gIGNsb3VkRm9ybWF0aW9uU3RhY2s6IENsb3VkRm9ybWF0aW9uU3RhY2ssXG4gIHN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgaG90c3dhcE1vZGU6IEhvdHN3YXBNb2RlLFxuICBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXM6IEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbik6IFByb21pc2U8U3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGhvdHN3YXBTcGFuID0gYXdhaXQgaW9IZWxwZXIuc3BhbihTUEFOLkhPVFNXQVApLmJlZ2luKHtcbiAgICBzdGFjazogc3RhY2tBcnRpZmFjdCxcbiAgICBtb2RlOiBob3Rzd2FwTW9kZSxcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaG90c3dhcERlcGxveW1lbnQoXG4gICAgc2RrUHJvdmlkZXIsXG4gICAgaG90c3dhcFNwYW4sXG4gICAgYXNzZXRQYXJhbXMsXG4gICAgc3RhY2tBcnRpZmFjdCxcbiAgICBob3Rzd2FwTW9kZSxcbiAgICBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsXG4gICk7XG5cbiAgYXdhaXQgaG90c3dhcFNwYW4uZW5kKHJlc3VsdCk7XG5cbiAgLy8gVGhpcyBpcyBhIGhvdHN3YXAgZXJyb3IgdGhhdCB3YXMgY2F1Z2h0IGR1cmluZyB0aGUgaG90c3dhcERlcGxveW1lbnQgZnVuY3Rpb25cbiAgLy8gSXQgaXMgdGhyb3duIGFmdGVyIHRoZSBob3Rzd2FwIHNwYW4gZW5kcyBzbyBpdCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGVsZW1ldHJ5XG4gIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gIH1cblxuICBpZiAocmVzdWx0Py5ob3Rzd2FwcGVkID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdkaWQtZGVwbG95LXN0YWNrJyxcbiAgICAgIG5vT3A6IHJlc3VsdC5ob3Rzd2FwcGFibGVDaGFuZ2VzLmxlbmd0aCA9PT0gMCxcbiAgICAgIHN0YWNrQXJuOiBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrSWQsXG4gICAgICBvdXRwdXRzOiBjbG91ZEZvcm1hdGlvblN0YWNrLm91dHB1dHMsXG4gICAgICBkZWxldGVGYWlsdXJlczogW10sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGVyZm9ybSBhIGhvdHN3YXAgZGVwbG95bWVudCwgc2hvcnQtY2lyY3VpdGluZyBDbG91ZEZvcm1hdGlvbiBpZiBwb3NzaWJsZS5cbiAqIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGF0dGVtcHRlZCBob3Rzd2FwIGRlcGxveW1lbnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaG90c3dhcERlcGxveW1lbnQoXG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgaW9TcGFuOiBJTWVzc2FnZVNwYW48YW55PixcbiAgYXNzZXRQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gIHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gIGhvdHN3YXBNb2RlOiBIb3Rzd2FwTW9kZSxcbiAgaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzOiBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsXG4pOiBQcm9taXNlPE9taXQ8SG90c3dhcFJlc3VsdCwgJ2R1cmF0aW9uJz4+IHtcbiAgLy8gcmVzb2x2ZSB0aGUgZW52aXJvbm1lbnQsIHNvIHdlIGNhbiBzdWJzdGl0dXRlIHRoaW5ncyBsaWtlIEFXUzo6UmVnaW9uIGluIENGTiBleHByZXNzaW9uc1xuICBjb25zdCByZXNvbHZlZEVudiA9IGF3YWl0IHNka1Byb3ZpZGVyLnJlc29sdmVFbnZpcm9ubWVudChzdGFjay5lbnZpcm9ubWVudCk7XG4gIC8vIGNyZWF0ZSBhIG5ldyBTREsgdXNpbmcgdGhlIENMSSBjcmVkZW50aWFscywgYmVjYXVzZSB0aGUgZGVmYXVsdCBvbmUgd2lsbCBub3Qgd29yayBmb3IgbmV3LXN0eWxlIHN5bnRoZXNpcyAtXG4gIC8vIGl0IGFzc3VtZXMgdGhlIGJvb3RzdHJhcCBkZXBsb3kgUm9sZSwgd2hpY2ggZG9lc24ndCBoYXZlIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBMYW1iZGEgZnVuY3Rpb25zXG4gIGNvbnN0IHNkayA9IChhd2FpdCBzZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudChyZXNvbHZlZEVudiwgTW9kZS5Gb3JXcml0aW5nKSkuc2RrO1xuXG4gIC8vIENoZWNrIGZvciBhIGNhY2hlZCB0ZW1wbGF0ZSBmcm9tIGEgcHJldmlvdXMgaG90c3dhcCBkZXBsb3ltZW50LlxuICAvLyBVc2UgaWYgYXZhaWxhYmxlLCByZXByZXNlbnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSByZXNvdXJjZXMgaW52b2x2ZWQgaW4gaG90c3dhcC5cbiAgY29uc3QgaG90c3dhcENhY2hlID0gYXdhaXQgcmVhZEhvdHN3YXBUZW1wbGF0ZUNhY2hlKHN0YWNrLmFzc2VtYmx5LmRpcmVjdG9yeSwgc3RhY2suc3RhY2tOYW1lLCBzdGFjay50ZW1wbGF0ZSk7XG4gIGNvbnN0IGN1cnJlbnRUZW1wbGF0ZSA9IGhvdHN3YXBDYWNoZSA/PyBhd2FpdCBsb2FkQ3VycmVudFRlbXBsYXRlV2l0aE5lc3RlZFN0YWNrcyhzdGFjaywgc2RrKTtcblxuICBjb25zdCBldmFsdWF0ZUNmblRlbXBsYXRlID0gbmV3IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSh7XG4gICAgc3RhY2tBcnRpZmFjdDogc3RhY2ssXG4gICAgcGFyYW1ldGVyczogYXNzZXRQYXJhbXMsXG4gICAgYWNjb3VudDogcmVzb2x2ZWRFbnYuYWNjb3VudCxcbiAgICByZWdpb246IHJlc29sdmVkRW52LnJlZ2lvbixcbiAgICBwYXJ0aXRpb246IChhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKSkucGFydGl0aW9uLFxuICAgIHNkayxcbiAgICBuZXN0ZWRTdGFja3M6IGN1cnJlbnRUZW1wbGF0ZS5uZXN0ZWRTdGFja3MsXG4gIH0pO1xuXG4gIGNvbnN0IHN0YWNrQ2hhbmdlcyA9IGNmbl9kaWZmLmZ1bGxEaWZmKGN1cnJlbnRUZW1wbGF0ZS5kZXBsb3llZFJvb3RUZW1wbGF0ZSwgc3RhY2sudGVtcGxhdGUpO1xuICBjb25zdCB7IGhvdHN3YXBwYWJsZSwgbm9uSG90c3dhcHBhYmxlIH0gPSBhd2FpdCBjbGFzc2lmeVJlc291cmNlQ2hhbmdlcyhcbiAgICBzdGFja0NoYW5nZXMsXG4gICAgZXZhbHVhdGVDZm5UZW1wbGF0ZSxcbiAgICBzZGssXG4gICAgY3VycmVudFRlbXBsYXRlLm5lc3RlZFN0YWNrcywgaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzLFxuICApO1xuXG4gIGF3YWl0IGxvZ1JlamVjdGVkQ2hhbmdlcyhpb1NwYW4sIG5vbkhvdHN3YXBwYWJsZSwgaG90c3dhcE1vZGUpO1xuXG4gIGNvbnN0IGhvdHN3YXBwYWJsZUNoYW5nZXMgPSBob3Rzd2FwcGFibGUubWFwKG8gPT4gby5jaGFuZ2UpO1xuICBjb25zdCBub25Ib3Rzd2FwcGFibGVDaGFuZ2VzID0gbm9uSG90c3dhcHBhYmxlLm1hcChuID0+IG4uY2hhbmdlKTtcblxuICBhd2FpdCBpb1NwYW4ubm90aWZ5KElPLkNES19UT09MS0lUX0k1NDAxLm1zZygnSG90c3dhcCBwbGFuIGNyZWF0ZWQnLCB7XG4gICAgc3RhY2ssXG4gICAgbW9kZTogaG90c3dhcE1vZGUsXG4gICAgaG90c3dhcHBhYmxlQ2hhbmdlcyxcbiAgICBub25Ib3Rzd2FwcGFibGVDaGFuZ2VzLFxuICB9KSk7XG5cbiAgLy8gcHJlc2VydmUgY2xhc3NpYyBob3Rzd2FwIGJlaGF2aW9yXG4gIGlmIChob3Rzd2FwTW9kZSA9PT0gJ2ZhbGwtYmFjaycpIHtcbiAgICBpZiAobm9uSG90c3dhcHBhYmxlQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFjayxcbiAgICAgICAgbW9kZTogaG90c3dhcE1vZGUsXG4gICAgICAgIGhvdHN3YXBwZWQ6IGZhbHNlLFxuICAgICAgICBob3Rzd2FwRmFsbGJhY2s6IHRydWUsXG4gICAgICAgIGhvdHN3YXBwYWJsZUNoYW5nZXMsXG4gICAgICAgIG5vbkhvdHN3YXBwYWJsZUNoYW5nZXMsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGFwcGx5IHRoZSBzaG9ydC1jaXJjdWl0YWJsZSBjaGFuZ2VzXG4gIGxldCBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwbHlBbGxIb3Rzd2FwT3BlcmF0aW9ucyhzZGssIGlvU3BhbiwgaG90c3dhcHBhYmxlKTtcbiAgICAvLyBDYWNoZSB0aGUgc3ludGhlc2l6ZWQgdGVtcGxhdGUgc28gdGhlIG5leHQgaG90c3dhcCBkaWZmcyBhZ2FpbnN0IGl0XG4gICAgYXdhaXQgd3JpdGVIb3Rzd2FwVGVtcGxhdGVDYWNoZShzdGFjay5hc3NlbWJseS5kaXJlY3RvcnksIHN0YWNrLnN0YWNrTmFtZSwgc3RhY2sudGVtcGxhdGUsIGN1cnJlbnRUZW1wbGF0ZS5uZXN0ZWRTdGFja3MpO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YWNrLFxuICAgIG1vZGU6IGhvdHN3YXBNb2RlLFxuICAgIGhvdHN3YXBwZWQ6ICFlcnJvcixcbiAgICBob3Rzd2FwRmFsbGJhY2s6IGZhbHNlLFxuICAgIGhvdHN3YXBwYWJsZUNoYW5nZXMsXG4gICAgbm9uSG90c3dhcHBhYmxlQ2hhbmdlcyxcbiAgICBlcnJvcixcbiAgfTtcbn1cblxuaW50ZXJmYWNlIENsYXNzaWZpZWRDaGFuZ2VzIHtcbiAgaG90c3dhcHBhYmxlOiBIb3Rzd2FwT3BlcmF0aW9uW107XG4gIG5vbkhvdHN3YXBwYWJsZTogUmVqZWN0ZWRDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBDbGFzc2lmaWVzIGFsbCBjaGFuZ2VzIHRvIGFsbCByZXNvdXJjZXMgYXMgZWl0aGVyIGhvdHN3YXBwYWJsZSBvciBub3QuXG4gKiBNZXRhZGF0YSBjaGFuZ2VzIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IG9mIChub24paG90c3dhcHBhYmxlIHJlc291cmNlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2xhc3NpZnlSZXNvdXJjZUNoYW5nZXMoXG4gIHN0YWNrQ2hhbmdlczogY2ZuX2RpZmYuVGVtcGxhdGVEaWZmLFxuICBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4gIHNkazogU0RLLFxuICBuZXN0ZWRTdGFja05hbWVzOiB7IFtuZXN0ZWRTdGFja05hbWU6IHN0cmluZ106IE5lc3RlZFN0YWNrVGVtcGxhdGVzIH0sXG4gIGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlczogSG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzLFxuKTogUHJvbWlzZTxDbGFzc2lmaWVkQ2hhbmdlcz4ge1xuICBjb25zdCByZXNvdXJjZURpZmZlcmVuY2VzID0gZ2V0U3RhY2tSZXNvdXJjZURpZmZlcmVuY2VzKHN0YWNrQ2hhbmdlcyk7XG5cbiAgY29uc3QgcHJvbWlzZXM6IEFycmF5PCgpID0+IFByb21pc2U8SG90c3dhcENoYW5nZVtdPj4gPSBbXTtcbiAgY29uc3QgaG90c3dhcHBhYmxlUmVzb3VyY2VzID0gbmV3IEFycmF5PEhvdHN3YXBPcGVyYXRpb24+KCk7XG4gIGNvbnN0IG5vbkhvdHN3YXBwYWJsZVJlc291cmNlcyA9IG5ldyBBcnJheTxSZWplY3RlZENoYW5nZT4oKTtcbiAgY29uc3QgbmVzdGVkU3RhY2tUYXNrczogQXJyYXk8UHJvbWlzZTxDbGFzc2lmaWVkQ2hhbmdlcz4+ID0gW107XG4gIGNvbnN0IGxpbWl0ID0gcExpbWl0KDEwKTtcblxuICBmb3IgKGNvbnN0IGxvZ2ljYWxJZCBvZiBPYmplY3Qua2V5cyhzdGFja0NoYW5nZXMub3V0cHV0cy5jaGFuZ2VzKSkge1xuICAgIG5vbkhvdHN3YXBwYWJsZVJlc291cmNlcy5wdXNoKHtcbiAgICAgIGhvdHN3YXBwYWJsZTogZmFsc2UsXG4gICAgICBjaGFuZ2U6IHtcbiAgICAgICAgcmVhc29uOiBOb25Ib3Rzd2FwcGFibGVSZWFzb24uT1VUUFVULFxuICAgICAgICBkZXNjcmlwdGlvbjogJ291dHB1dCB3YXMgY2hhbmdlZCcsXG4gICAgICAgIHN1YmplY3Q6IHtcbiAgICAgICAgICB0eXBlOiAnT3V0cHV0JyxcbiAgICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3IobG9naWNhbElkKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgLy8gZ2F0aGVyIHRoZSByZXN1bHRzIG9mIHRoZSBkZXRlY3RvciBmdW5jdGlvbnNcbiAgZm9yIChjb25zdCBbbG9naWNhbElkLCBjaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKHJlc291cmNlRGlmZmVyZW5jZXMpKSB7XG4gICAgaWYgKGNoYW5nZS5uZXdWYWx1ZT8uVHlwZSA9PT0gJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyAmJiBjaGFuZ2Uub2xkVmFsdWU/LlR5cGUgPT09ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycpIHtcbiAgICAgIG5lc3RlZFN0YWNrVGFza3MucHVzaChsaW1pdCgoKSA9PiBmaW5kTmVzdGVkSG90c3dhcHBhYmxlQ2hhbmdlcyhcbiAgICAgICAgbG9naWNhbElkLFxuICAgICAgICBjaGFuZ2UsXG4gICAgICAgIG5lc3RlZFN0YWNrTmFtZXMsXG4gICAgICAgIGV2YWx1YXRlQ2ZuVGVtcGxhdGUsXG4gICAgICAgIHNkayxcbiAgICAgICAgaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzLFxuICAgICAgKSkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgaG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlID0gaXNDYW5kaWRhdGVGb3JIb3Rzd2FwcGluZyhsb2dpY2FsSWQsIGNoYW5nZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZSk7XG4gICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBydW4gdGhpcyB0aHJvdWdoIHRoZSBkZXRlY3RvciBmdW5jdGlvbnMsIHdlIGNhbiBhbHJlYWR5IGp1ZGdlIHRoaXNcbiAgICBpZiAoJ2hvdHN3YXBwYWJsZScgaW4gaG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlKSB7XG4gICAgICBpZiAoIWhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZS5ob3Rzd2FwcGFibGUpIHtcbiAgICAgICAgbm9uSG90c3dhcHBhYmxlUmVzb3VyY2VzLnB1c2goaG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlKTtcbiAgICAgIH1cblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VUeXBlOiBzdHJpbmcgPSBob3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUubmV3VmFsdWUuVHlwZTtcbiAgICBpZiAocmVzb3VyY2VUeXBlIGluIFJFU09VUkNFX0RFVEVDVE9SUykge1xuICAgICAgLy8gcnVuIGRldGVjdG9yIGZ1bmN0aW9ucyBsYXppbHkgdG8gcHJldmVudCB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zXG4gICAgICBwcm9taXNlcy5wdXNoKCgpID0+XG4gICAgICAgIFJFU09VUkNFX0RFVEVDVE9SU1tyZXNvdXJjZVR5cGVdKGxvZ2ljYWxJZCwgaG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBldmFsdWF0ZUNmblRlbXBsYXRlLCBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXMpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9uSG90c3dhcHBhYmxlUmVzb3VyY2VzLnB1c2gobm9uSG90c3dhcHBhYmxlUmVzb3VyY2UoaG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcmVzb2x2ZSBhbGwgbmVzdGVkIHN0YWNrIGFuZCBkZXRlY3RvciByZXN1bHRzIGluIHBhcmFsbGVsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9wcm9taXNlYWxsLW5vLXVuYm91bmRlZC1wYXJhbGxlbGlzbVxuICBjb25zdCBuZXN0ZWRSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwobmVzdGVkU3RhY2tUYXNrcyk7XG4gIGZvciAoY29uc3QgbmVzdGVkIG9mIG5lc3RlZFJlc3VsdHMpIHtcbiAgICBob3Rzd2FwcGFibGVSZXNvdXJjZXMucHVzaCguLi5uZXN0ZWQuaG90c3dhcHBhYmxlKTtcbiAgICBub25Ib3Rzd2FwcGFibGVSZXNvdXJjZXMucHVzaCguLi5uZXN0ZWQubm9uSG90c3dhcHBhYmxlKTtcbiAgfVxuXG4gIGNvbnN0IGNoYW5nZXNEZXRlY3Rpb25SZXN1bHRzOiBBcnJheTxIb3Rzd2FwQ2hhbmdlW10+ID0gW107XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9wcm9taXNlYWxsLW5vLXVuYm91bmRlZC1wYXJhbGxlbGlzbVxuICBjb25zdCBkZXRlY3RvclJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcy5tYXAoKGZuKSA9PiBsaW1pdChmbikpKTtcbiAgZm9yIChjb25zdCBob3Rzd2FwRGV0ZWN0aW9uUmVzdWx0cyBvZiBkZXRlY3RvclJlc3VsdHMpIHtcbiAgICBjaGFuZ2VzRGV0ZWN0aW9uUmVzdWx0cy5wdXNoKGhvdHN3YXBEZXRlY3Rpb25SZXN1bHRzKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcmVzb3VyY2VEZXRlY3Rpb25SZXN1bHRzIG9mIGNoYW5nZXNEZXRlY3Rpb25SZXN1bHRzKSB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eVJlc3VsdCBvZiByZXNvdXJjZURldGVjdGlvblJlc3VsdHMpIHtcbiAgICAgIHByb3BlcnR5UmVzdWx0LmhvdHN3YXBwYWJsZVxuICAgICAgICA/IGhvdHN3YXBwYWJsZVJlc291cmNlcy5wdXNoKHByb3BlcnR5UmVzdWx0KVxuICAgICAgICA6IG5vbkhvdHN3YXBwYWJsZVJlc291cmNlcy5wdXNoKHByb3BlcnR5UmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGhvdHN3YXBwYWJsZTogaG90c3dhcHBhYmxlUmVzb3VyY2VzLFxuICAgIG5vbkhvdHN3YXBwYWJsZTogbm9uSG90c3dhcHBhYmxlUmVzb3VyY2VzLFxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGNoYW5nZXMgdG8gcmVzb3VyY2VzIGluIHRoZSBnaXZlbiBTdGFjay5cbiAqXG4gKiBAcGFyYW0gc3RhY2tDaGFuZ2VzIC0gdGhlIGNvbGxlY3Rpb24gb2YgYWxsIGNoYW5nZXMgdG8gYSBnaXZlbiBTdGFja1xuICovXG5mdW5jdGlvbiBnZXRTdGFja1Jlc291cmNlRGlmZmVyZW5jZXMoc3RhY2tDaGFuZ2VzOiBjZm5fZGlmZi5UZW1wbGF0ZURpZmYpOiB7XG4gIFtsb2dpY2FsSWQ6IHN0cmluZ106IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZTtcbn0ge1xuICAvLyB3ZSBuZWVkIHRvIGNvbGxhcHNlIGxvZ2ljYWwgSUQgcmVuYW1lIGNoYW5nZXMgaW50byBvbmUgY2hhbmdlLFxuICAvLyBhcyB0aGV5IGFyZSByZXByZXNlbnRlZCBpbiBzdGFja0NoYW5nZXMgYXMgYSBwYWlyIG9mIHR3byBjaGFuZ2VzOiBvbmUgYWRkaXRpb24gYW5kIG9uZSByZW1vdmFsXG4gIGNvbnN0IGFsbFJlc291cmNlQ2hhbmdlczogeyBbbG9nSWQ6IHN0cmluZ106IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSB9ID0gc3RhY2tDaGFuZ2VzLnJlc291cmNlcy5jaGFuZ2VzO1xuICBjb25zdCBhbGxSZW1vdmFsQ2hhbmdlcyA9IGZpbHRlckRpY3QoYWxsUmVzb3VyY2VDaGFuZ2VzLCAocmVzQ2hhbmdlKSA9PiByZXNDaGFuZ2UuaXNSZW1vdmFsKTtcbiAgY29uc3QgYWxsTm9uUmVtb3ZhbENoYW5nZXMgPSBmaWx0ZXJEaWN0KGFsbFJlc291cmNlQ2hhbmdlcywgKHJlc0NoYW5nZSkgPT4gIXJlc0NoYW5nZS5pc1JlbW92YWwpO1xuICBmb3IgKGNvbnN0IFtsb2dJZCwgbm9uUmVtb3ZhbENoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXMoYWxsTm9uUmVtb3ZhbENoYW5nZXMpKSB7XG4gICAgaWYgKG5vblJlbW92YWxDaGFuZ2UuaXNBZGRpdGlvbikge1xuICAgICAgY29uc3QgYWRkQ2hhbmdlID0gbm9uUmVtb3ZhbENoYW5nZTtcbiAgICAgIC8vIHNlYXJjaCBmb3IgYW4gaWRlbnRpY2FsIHJlbW92YWwgY2hhbmdlXG4gICAgICBjb25zdCBpZGVudGljYWxSZW1vdmFsQ2hhbmdlID0gT2JqZWN0LmVudHJpZXMoYWxsUmVtb3ZhbENoYW5nZXMpLmZpbmQoKFtfLCByZW1DaGFuZ2VdKSA9PiB7XG4gICAgICAgIHJldHVybiBjaGFuZ2VzQXJlRm9yU2FtZVJlc291cmNlKHJlbUNoYW5nZSwgYWRkQ2hhbmdlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgd2UgZm91bmQgb25lLCB0aGVuIHRoaXMgbWVhbnMgdGhpcyBpcyBhIHJlbmFtZSBjaGFuZ2VcbiAgICAgIGlmIChpZGVudGljYWxSZW1vdmFsQ2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IFtyZW1vdmVkTG9nSWQsIHJlbW92ZWRSZXNvdXJjZUNoYW5nZV0gPSBpZGVudGljYWxSZW1vdmFsQ2hhbmdlO1xuICAgICAgICBhbGxOb25SZW1vdmFsQ2hhbmdlc1tsb2dJZF0gPSBtYWtlUmVuYW1lRGlmZmVyZW5jZShyZW1vdmVkUmVzb3VyY2VDaGFuZ2UsIGFkZENoYW5nZSk7XG4gICAgICAgIC8vIGRlbGV0ZSB0aGUgcmVtb3ZhbCBjaGFuZ2UgdGhhdCBmb3JtcyB0aGUgcmVuYW1lIHBhaXJcbiAgICAgICAgZGVsZXRlIGFsbFJlbW92YWxDaGFuZ2VzW3JlbW92ZWRMb2dJZF07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgYXJlIGFsbCBvZiB0aGUgcmVtYWluaW5nIHJlbW92YWwgY2hhbmdlcyxcbiAgLy8gcGx1cyBhbGwgb2YgdGhlIG5vbi1yZW1vdmFsIGNoYW5nZXNcbiAgLy8gKHdlIHNhdmVkIHRoZSByZW5hbWUgY2hhbmdlcyBpbiB0aGF0IG9iamVjdCBhbHJlYWR5KVxuICByZXR1cm4ge1xuICAgIC4uLmFsbFJlbW92YWxDaGFuZ2VzLFxuICAgIC4uLmFsbE5vblJlbW92YWxDaGFuZ2VzLFxuICB9O1xufVxuXG4vKiogRmlsdGVycyBhbiBvYmplY3Qgd2l0aCBzdHJpbmcga2V5cyBiYXNlZCBvbiB3aGV0aGVyIHRoZSBjYWxsYmFjayByZXR1cm5zICd0cnVlJyBmb3IgdGhlIGdpdmVuIHZhbHVlIGluIHRoZSBvYmplY3QuICovXG5mdW5jdGlvbiBmaWx0ZXJEaWN0PFQ+KGRpY3Q6IHsgW2tleTogc3RyaW5nXTogVCB9LCBmdW5jOiAodDogVCkgPT4gYm9vbGVhbik6IHsgW2tleTogc3RyaW5nXTogVCB9IHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGRpY3QpLnJlZHVjZShcbiAgICAoYWNjLCBba2V5LCB0XSkgPT4ge1xuICAgICAgaWYgKGZ1bmModCkpIHtcbiAgICAgICAgYWNjW2tleV0gPSB0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogVCB9LFxuICApO1xufVxuXG4vKiogRmluZHMgYW55IGhvdHN3YXBwYWJsZSBjaGFuZ2VzIGluIGFsbCBuZXN0ZWQgc3RhY2tzLiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZE5lc3RlZEhvdHN3YXBwYWJsZUNoYW5nZXMoXG4gIGxvZ2ljYWxJZDogc3RyaW5nLFxuICBjaGFuZ2U6IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSxcbiAgbmVzdGVkU3RhY2tUZW1wbGF0ZXM6IHsgW25lc3RlZFN0YWNrTmFtZTogc3RyaW5nXTogTmVzdGVkU3RhY2tUZW1wbGF0ZXMgfSxcbiAgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuICBzZGs6IFNESyxcbiAgaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzOiBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsXG4pOiBQcm9taXNlPENsYXNzaWZpZWRDaGFuZ2VzPiB7XG4gIGNvbnN0IG5lc3RlZFN0YWNrID0gbmVzdGVkU3RhY2tUZW1wbGF0ZXNbbG9naWNhbElkXTtcbiAgaWYgKCFuZXN0ZWRTdGFjay5waHlzaWNhbE5hbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaG90c3dhcHBhYmxlOiBbXSxcbiAgICAgIG5vbkhvdHN3YXBwYWJsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaG90c3dhcHBhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjaGFuZ2U6IHtcbiAgICAgICAgICAgIHJlYXNvbjogTm9uSG90c3dhcHBhYmxlUmVhc29uLk5FU1RFRF9TVEFDS19DUkVBVElPTixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnbmV3bHkgY3JlYXRlZCBuZXN0ZWQgc3RhY2tzIGNhbm5vdCBiZSBob3Rzd2FwcGVkJyxcbiAgICAgICAgICAgIHN1YmplY3Q6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ1Jlc291cmNlJyxcbiAgICAgICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycsXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiBldmFsdWF0ZUNmblRlbXBsYXRlLm1ldGFkYXRhRm9yKGxvZ2ljYWxJZCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBldmFsdWF0ZU5lc3RlZENmblRlbXBsYXRlID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5jcmVhdGVOZXN0ZWRFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUoXG4gICAgbmVzdGVkU3RhY2sucGh5c2ljYWxOYW1lLFxuICAgIG5lc3RlZFN0YWNrLmdlbmVyYXRlZFRlbXBsYXRlLFxuICAgIGNoYW5nZS5uZXdWYWx1ZT8uUHJvcGVydGllcz8uUGFyYW1ldGVycyxcbiAgKTtcblxuICBjb25zdCBuZXN0ZWREaWZmID0gY2ZuX2RpZmYuZnVsbERpZmYoXG4gICAgbmVzdGVkU3RhY2tUZW1wbGF0ZXNbbG9naWNhbElkXS5kZXBsb3llZFRlbXBsYXRlLFxuICAgIG5lc3RlZFN0YWNrVGVtcGxhdGVzW2xvZ2ljYWxJZF0uZ2VuZXJhdGVkVGVtcGxhdGUsXG4gICk7XG5cbiAgcmV0dXJuIGNsYXNzaWZ5UmVzb3VyY2VDaGFuZ2VzKFxuICAgIG5lc3RlZERpZmYsXG4gICAgZXZhbHVhdGVOZXN0ZWRDZm5UZW1wbGF0ZSxcbiAgICBzZGssXG4gICAgbmVzdGVkU3RhY2tUZW1wbGF0ZXNbbG9naWNhbElkXS5uZXN0ZWRTdGFja1RlbXBsYXRlcyxcbiAgICBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsXG4gICk7XG59XG5cbi8qKiBSZXR1cm5zICd0cnVlJyBpZiBhIHBhaXIgb2YgY2hhbmdlcyBpcyBmb3IgdGhlIHNhbWUgcmVzb3VyY2UuICovXG5mdW5jdGlvbiBjaGFuZ2VzQXJlRm9yU2FtZVJlc291cmNlKFxuICBvbGRDaGFuZ2U6IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSxcbiAgbmV3Q2hhbmdlOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBvbGRDaGFuZ2Uub2xkUmVzb3VyY2VUeXBlID09PSBuZXdDaGFuZ2UubmV3UmVzb3VyY2VUeXBlICYmXG4gICAgLy8gdGhpcyBpc24ndCBncmVhdCwgYnV0IEkgZG9uJ3Qgd2FudCB0byBicmluZyBpbiBzb21ldGhpbmcgbGlrZSB1bmRlcnNjb3JlIGp1c3QgZm9yIHRoaXMgY29tcGFyaXNvblxuICAgIEpTT04uc3RyaW5naWZ5KG9sZENoYW5nZS5vbGRQcm9wZXJ0aWVzKSA9PT0gSlNPTi5zdHJpbmdpZnkobmV3Q2hhbmdlLm5ld1Byb3BlcnRpZXMpXG4gICk7XG59XG5cbmZ1bmN0aW9uIG1ha2VSZW5hbWVEaWZmZXJlbmNlKFxuICByZW1DaGFuZ2U6IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSxcbiAgYWRkQ2hhbmdlOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UsXG4pOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2Uge1xuICByZXR1cm4gbmV3IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZShcbiAgICAvLyB3ZSBoYXZlIHRvIGZpbGwgaW4gdGhlIG9sZCB2YWx1ZSwgYmVjYXVzZSBvdGhlcndpc2UgdGhpcyB3aWxsIGJlIGNsYXNzaWZpZWQgYXMgYSBub24taG90c3dhcHBhYmxlIGNoYW5nZVxuICAgIHJlbUNoYW5nZS5vbGRWYWx1ZSxcbiAgICBhZGRDaGFuZ2UubmV3VmFsdWUsXG4gICAge1xuICAgICAgcmVzb3VyY2VUeXBlOiB7XG4gICAgICAgIG9sZFR5cGU6IHJlbUNoYW5nZS5vbGRSZXNvdXJjZVR5cGUsXG4gICAgICAgIG5ld1R5cGU6IGFkZENoYW5nZS5uZXdSZXNvdXJjZVR5cGUsXG4gICAgICB9LFxuICAgICAgcHJvcGVydHlEaWZmczogKGFkZENoYW5nZSBhcyBhbnkpLnByb3BlcnR5RGlmZnMsXG4gICAgICBvdGhlckRpZmZzOiAoYWRkQ2hhbmdlIGFzIGFueSkub3RoZXJEaWZmcyxcbiAgICB9LFxuICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBgSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlYCBpZiB0aGUgY2hhbmdlIGlzIGhvdHN3YXBwYWJsZVxuICogUmV0dXJucyBhbiBlbXB0eSBgSG90c3dhcHBhYmxlQ2hhbmdlYCBpZiB0aGUgY2hhbmdlIGlzIHRvIENESzo6TWV0YWRhdGFcbiAqIFJldHVybnMgYSBgTm9uSG90c3dhcHBhYmxlQ2hhbmdlYCBpZiB0aGUgY2hhbmdlIGlzIG5vdCBob3Rzd2FwcGFibGVcbiAqL1xuZnVuY3Rpb24gaXNDYW5kaWRhdGVGb3JIb3Rzd2FwcGluZyhcbiAgbG9naWNhbElkOiBzdHJpbmcsXG4gIGNoYW5nZTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlLFxuICBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBSZWplY3RlZENoYW5nZSB8IFJlc291cmNlQ2hhbmdlIHtcbiAgLy8gYSByZXNvdXJjZSBoYXMgYmVlbiByZW1vdmVkIE9SIGEgcmVzb3VyY2UgaGFzIGJlZW4gYWRkZWQ7IHdlIGNhbid0IHNob3J0LWNpcmN1aXQgdGhhdCBjaGFuZ2VcbiAgaWYgKCFjaGFuZ2Uub2xkVmFsdWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaG90c3dhcHBhYmxlOiBmYWxzZSxcbiAgICAgIGNoYW5nZToge1xuICAgICAgICByZWFzb246IE5vbkhvdHN3YXBwYWJsZVJlYXNvbi5SRVNPVVJDRV9DUkVBVElPTixcbiAgICAgICAgZGVzY3JpcHRpb246IGByZXNvdXJjZSAnJHtsb2dpY2FsSWR9JyB3YXMgY3JlYXRlZCBieSB0aGlzIGRlcGxveW1lbnRgLFxuICAgICAgICBzdWJqZWN0OiB7XG4gICAgICAgICAgdHlwZTogJ1Jlc291cmNlJyxcbiAgICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiBjaGFuZ2UubmV3VmFsdWUhLlR5cGUsXG4gICAgICAgICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3IobG9naWNhbElkKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSBlbHNlIGlmICghY2hhbmdlLm5ld1ZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhvdHN3YXBwYWJsZTogZmFsc2UsXG4gICAgICBsb2dpY2FsSWQsXG4gICAgICBjaGFuZ2U6IHtcbiAgICAgICAgcmVhc29uOiBOb25Ib3Rzd2FwcGFibGVSZWFzb24uUkVTT1VSQ0VfREVMRVRJT04sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgcmVzb3VyY2UgJyR7bG9naWNhbElkfScgd2FzIGRlc3Ryb3llZCBieSB0aGlzIGRlcGxveW1lbnRgLFxuICAgICAgICBzdWJqZWN0OiB7XG4gICAgICAgICAgdHlwZTogJ1Jlc291cmNlJyxcbiAgICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiBjaGFuZ2Uub2xkVmFsdWUuVHlwZSxcbiAgICAgICAgICBtZXRhZGF0YTogZXZhbHVhdGVDZm5UZW1wbGF0ZS5tZXRhZGF0YUZvcihsb2dpY2FsSWQpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gYSByZXNvdXJjZSBoYXMgaGFkIGl0cyB0eXBlIGNoYW5nZWRcbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlICE9PSBjaGFuZ2Uub2xkVmFsdWUuVHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICBob3Rzd2FwcGFibGU6IGZhbHNlLFxuICAgICAgY2hhbmdlOiB7XG4gICAgICAgIHJlYXNvbjogTm9uSG90c3dhcHBhYmxlUmVhc29uLlJFU09VUkNFX1RZUEVfQ0hBTkdFRCxcbiAgICAgICAgZGVzY3JpcHRpb246IGByZXNvdXJjZSAnJHtsb2dpY2FsSWR9JyBoYWQgaXRzIHR5cGUgY2hhbmdlZCBmcm9tICcke2NoYW5nZS5vbGRWYWx1ZT8uVHlwZX0nIHRvICcke2NoYW5nZS5uZXdWYWx1ZT8uVHlwZX0nYCxcbiAgICAgICAgc3ViamVjdDoge1xuICAgICAgICAgIHR5cGU6ICdSZXNvdXJjZScsXG4gICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogY2hhbmdlLm5ld1ZhbHVlLlR5cGUsXG4gICAgICAgICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3IobG9naWNhbElkKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9naWNhbElkLFxuICAgIG9sZFZhbHVlOiBjaGFuZ2Uub2xkVmFsdWUsXG4gICAgbmV3VmFsdWU6IGNoYW5nZS5uZXdWYWx1ZSxcbiAgICBwcm9wZXJ0eVVwZGF0ZXM6IGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXMsXG4gICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3IobG9naWNhbElkKSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBwbHlBbGxIb3Rzd2FwT3BlcmF0aW9ucyhzZGs6IFNESywgaW9TcGFuOiBJTWVzc2FnZVNwYW48YW55PiwgaG90c3dhcHBhYmxlQ2hhbmdlczogSG90c3dhcE9wZXJhdGlvbltdKTogUHJvbWlzZTx2b2lkW10+IHtcbiAgaWYgKGhvdHN3YXBwYWJsZUNoYW5nZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cblxuICBhd2FpdCBpb1NwYW4uZGVmYXVsdHMuaW5mbyhgXFxuJHtJQ09OfSBob3Rzd2FwcGluZyByZXNvdXJjZXM6YCk7XG4gIGNvbnN0IGxpbWl0ID0gcExpbWl0KDEwKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBjZGtsYWJzL3Byb21pc2VhbGwtbm8tdW5ib3VuZGVkLXBhcmFsbGVsaXNtXG4gIHJldHVybiBQcm9taXNlLmFsbChob3Rzd2FwcGFibGVDaGFuZ2VzLm1hcChob3Rzd2FwT3BlcmF0aW9uID0+IGxpbWl0KCgpID0+IHtcbiAgICByZXR1cm4gYXBwbHlIb3Rzd2FwT3BlcmF0aW9uKHNkaywgaW9TcGFuLCBob3Rzd2FwT3BlcmF0aW9uKTtcbiAgfSkpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBwbHlIb3Rzd2FwT3BlcmF0aW9uKHNkazogU0RLLCBpb1NwYW46IElNZXNzYWdlU3Bhbjxhbnk+LCBob3Rzd2FwT3BlcmF0aW9uOiBIb3Rzd2FwT3BlcmF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIG5vdGUgdGhlIHR5cGUgb2Ygc2VydmljZSB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgaG90c3dhcHBlZCBpbiB0aGUgVXNlci1BZ2VudFxuICBjb25zdCBjdXN0b21Vc2VyQWdlbnQgPSBgY2RrLWhvdHN3YXAvc3VjY2Vzcy0ke2hvdHN3YXBPcGVyYXRpb24uc2VydmljZX1gO1xuICBzZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7XG4gIGNvbnN0IHJlc291cmNlVGV4dCA9IChyOiBBZmZlY3RlZFJlc291cmNlKSA9PiByLmRlc2NyaXB0aW9uID8/IGAke3IucmVzb3VyY2VUeXBlfSAnJHtyLnBoeXNpY2FsTmFtZSA/PyByLmxvZ2ljYWxJZH0nYDtcblxuICBhd2FpdCBpb1NwYW4ubm90aWZ5KElPLkNES19UT09MS0lUX0k1NDAyLm1zZyhcbiAgICBob3Rzd2FwT3BlcmF0aW9uLmNoYW5nZS5yZXNvdXJjZXMubWFwKHIgPT4gZm9ybWF0KGAgICAke0lDT059ICVzYCwgY2hhbGsuYm9sZChyZXNvdXJjZVRleHQocikpKSkuam9pbignXFxuJyksXG4gICAgaG90c3dhcE9wZXJhdGlvbi5jaGFuZ2UsXG4gICkpO1xuXG4gIC8vIGlmIHRoZSBTREsgY2FsbCBmYWlscywgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24gYnkgdGhlIFNES1xuICAvLyBhbmQgd2lsbCBwcmV2ZW50IHRoZSBncmVlbiAnaG90c3dhcHBlZCEnIHRleHQgZnJvbSBiZWluZyBkaXNwbGF5ZWRcbiAgdHJ5IHtcbiAgICBhd2FpdCBob3Rzd2FwT3BlcmF0aW9uLmFwcGx5KHNkayk7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIGlmIChlLm5hbWUgPT09ICdUaW1lb3V0RXJyb3InIHx8IGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICBjb25zdCByZXN1bHQ6IFdhaXRlclJlc3VsdCA9IEpTT04ucGFyc2UoZm9ybWF0RXJyb3JNZXNzYWdlKGUpKTtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFRvb2xraXRFcnJvcignSG90c3dhcFdhaXRlckZhaWxlZCcsIGZvcm1hdFdhaXRlckVycm9yUmVzdWx0KHJlc3VsdCkpO1xuICAgICAgZXJyb3IubmFtZSA9IGUubmFtZTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgYXdhaXQgaW9TcGFuLm5vdGlmeShJTy5DREtfVE9PTEtJVF9JNTQwMy5tc2coXG4gICAgaG90c3dhcE9wZXJhdGlvbi5jaGFuZ2UucmVzb3VyY2VzLm1hcChyID0+IGZvcm1hdChgICAgJHtJQ09OfSAlcyAlc2AsIGNoYWxrLmJvbGQocmVzb3VyY2VUZXh0KHIpKSwgY2hhbGsuZ3JlZW4oJ2hvdHN3YXBwZWQhJykpKS5qb2luKCdcXG4nKSxcbiAgICBob3Rzd2FwT3BlcmF0aW9uLmNoYW5nZSxcbiAgKSk7XG5cbiAgc2RrLnJlbW92ZUN1c3RvbVVzZXJBZ2VudChjdXN0b21Vc2VyQWdlbnQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXYWl0ZXJFcnJvclJlc3VsdChyZXN1bHQ6IFdhaXRlclJlc3VsdCkge1xuICBjb25zdCBtYWluID0gW1xuICAgIGBSZXNvdXJjZSBpcyBub3QgaW4gdGhlIGV4cGVjdGVkIHN0YXRlIGR1ZSB0byB3YWl0ZXIgc3RhdHVzOiAke3Jlc3VsdC5zdGF0ZX1gLFxuICAgIHJlc3VsdC5yZWFzb24gPyBgJHtyZXN1bHQucmVhc29ufS5gIDogJycsXG4gIF0uam9pbignLiAnKTtcblxuICBpZiAocmVzdWx0Lm9ic2VydmVkUmVzcG9uc2VzICE9IG51bGwpIHtcbiAgICBjb25zdCBvYnNlcnZlZFJlc3BvbnNlcyA9IE9iamVjdFxuICAgICAgLmVudHJpZXMocmVzdWx0Lm9ic2VydmVkUmVzcG9uc2VzKVxuICAgICAgLm1hcCgoW21zZywgY291bnRdKSA9PiBgICAtICR7bXNnfSAoJHtjb3VudH0pYClcbiAgICAgIC5qb2luKCdcXG4nKTtcblxuICAgIHJldHVybiBgJHttYWlufSBPYnNlcnZlZCByZXNwb25zZXM6XFxuJHtvYnNlcnZlZFJlc3BvbnNlc31gO1xuICB9XG5cbiAgcmV0dXJuIG1haW47XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvZ1JlamVjdGVkQ2hhbmdlcyhcbiAgaW9TcGFuOiBJTWVzc2FnZVNwYW48YW55PixcbiAgcmVqZWN0ZWRDaGFuZ2VzOiBSZWplY3RlZENoYW5nZVtdLFxuICBob3Rzd2FwTW9kZTogSG90c3dhcE1vZGUsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHJlamVjdGVkQ2hhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLyoqXG4gICAqIEVLUyBTZXJ2aWNlcyBjYW4gaGF2ZSBhIHRhc2sgZGVmaW5pdGlvbiB0aGF0IGRvZXNuJ3QgcmVmZXIgdG8gdGhlIHRhc2sgZGVmaW5pdGlvbiBiZWluZyB1cGRhdGVkLlxuICAgKiBXZSBoYXZlIHRvIGxvZyB0aGlzIGFzIGEgbm9uLWhvdHN3YXBwYWJsZSBjaGFuZ2UgdG8gdGhlIHRhc2sgZGVmaW5pdGlvbiwgYnV0IHdoZW4gd2UgZG8sXG4gICAqIHdlIHdpbmQgdXAgaG90c3dhcHBpbmcgdGhlIHRhc2sgZGVmaW5pdGlvbiBhbmQgbG9nZ2luZyBpdCBhcyBhIG5vbi1ob3Rzd2FwcGFibGUgY2hhbmdlLlxuICAgKlxuICAgKiBUaGlzIGxvZ2ljIHByZXZlbnRzIHVzIGZyb20gbG9nZ2luZyB0aGF0IGNoYW5nZSBhcyBub24taG90c3dhcHBhYmxlIHdoZW4gd2UgaG90c3dhcCBpdC5cbiAgICovXG4gIGlmIChob3Rzd2FwTW9kZSA9PT0gJ2hvdHN3YXAtb25seScpIHtcbiAgICByZWplY3RlZENoYW5nZXMgPSByZWplY3RlZENoYW5nZXMuZmlsdGVyKChjaGFuZ2UpID0+IGNoYW5nZS5ob3Rzd2FwT25seVZpc2libGUgPT09IHRydWUpO1xuXG4gICAgaWYgKHJlamVjdGVkQ2hhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXNzYWdlcyA9IFsnJ107IC8vIHN0YXJ0IHdpdGggZW1wdHkgbGluZVxuXG4gIGlmIChob3Rzd2FwTW9kZSA9PT0gJ2hvdHN3YXAtb25seScpIHtcbiAgICBtZXNzYWdlcy5wdXNoKGZvcm1hdCgnJXMgJXMnLCBjaGFsay5yZWQoJ+KaoO+4jycpLCBjaGFsay5yZWQoJ1RoZSBmb2xsb3dpbmcgbm9uLWhvdHN3YXBwYWJsZSBjaGFuZ2VzIHdlcmUgZm91bmQuIFRvIHJlY29uY2lsZSB0aGVzZSB1c2luZyBDbG91ZEZvcm1hdGlvbiwgc3BlY2lmeSAtLWhvdHN3YXAtZmFsbGJhY2snKSkpO1xuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2VzLnB1c2goZm9ybWF0KCclcyAlcycsIGNoYWxrLnJlZCgn4pqg77iPJyksIGNoYWxrLnJlZCgnVGhlIGZvbGxvd2luZyBub24taG90c3dhcHBhYmxlIGNoYW5nZXMgd2VyZSBmb3VuZDonKSkpO1xuICB9XG5cbiAgZm9yIChjb25zdCB7IGNoYW5nZSB9IG9mIHJlamVjdGVkQ2hhbmdlcykge1xuICAgIG1lc3NhZ2VzLnB1c2goJyAgICAnICsgbm9uSG90c3dhcHBhYmxlQ2hhbmdlTWVzc2FnZShjaGFuZ2UpKTtcbiAgfVxuICBtZXNzYWdlcy5wdXNoKCcnKTsgLy8gbmV3bGluZVxuXG4gIGF3YWl0IGlvU3Bhbi5kZWZhdWx0cy5pbmZvKG1lc3NhZ2VzLmpvaW4oJ1xcbicpKTtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIGEgTm9uSG90c3dhcHBhYmxlQ2hhbmdlXG4gKi9cbmZ1bmN0aW9uIG5vbkhvdHN3YXBwYWJsZUNoYW5nZU1lc3NhZ2UoY2hhbmdlOiBOb25Ib3Rzd2FwcGFibGVDaGFuZ2UpOiBzdHJpbmcge1xuICBjb25zdCBzdWJqZWN0ID0gY2hhbmdlLnN1YmplY3Q7XG4gIGNvbnN0IHJlYXNvbiA9IGNoYW5nZS5kZXNjcmlwdGlvbiA/PyBjaGFuZ2UucmVhc29uO1xuXG4gIHN3aXRjaCAoc3ViamVjdC50eXBlKSB7XG4gICAgY2FzZSAnT3V0cHV0JzpcbiAgICAgIHJldHVybiBmb3JtYXQoXG4gICAgICAgICdvdXRwdXQ6ICVzLCByZWFzb246ICVzJyxcbiAgICAgICAgY2hhbGsuYm9sZChzdWJqZWN0LmxvZ2ljYWxJZCksXG4gICAgICAgIGNoYWxrLnJlZChyZWFzb24pLFxuICAgICAgKTtcbiAgICBjYXNlICdSZXNvdXJjZSc6XG4gICAgICByZXR1cm4gbm9uSG90c3dhcHBhYmxlUmVzb3VyY2VNZXNzYWdlKHN1YmplY3QsIHJlYXNvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3JtYXRzIGEgbm9uLWhvdHN3YXBwYWJsZSByZXNvdXJjZSBzdWJqZWN0XG4gKi9cbmZ1bmN0aW9uIG5vbkhvdHN3YXBwYWJsZVJlc291cmNlTWVzc2FnZShzdWJqZWN0OiBSZXNvdXJjZVN1YmplY3QsIHJlYXNvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHN1YmplY3QucmVqZWN0ZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZm9ybWF0KFxuICAgICAgJ3Jlc291cmNlOiAlcywgdHlwZTogJXMsIHJlamVjdGVkIGNoYW5nZXM6ICVzLCByZWFzb246ICVzJyxcbiAgICAgIGNoYWxrLmJvbGQoc3ViamVjdC5sb2dpY2FsSWQpLFxuICAgICAgY2hhbGsuYm9sZChzdWJqZWN0LnJlc291cmNlVHlwZSksXG4gICAgICBjaGFsay5ib2xkKHN1YmplY3QucmVqZWN0ZWRQcm9wZXJ0aWVzKSxcbiAgICAgIGNoYWxrLnJlZChyZWFzb24pLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZm9ybWF0KFxuICAgICdyZXNvdXJjZTogJXMsIHR5cGU6ICVzLCByZWFzb246ICVzJyxcbiAgICBjaGFsay5ib2xkKHN1YmplY3QubG9naWNhbElkKSxcbiAgICBjaGFsay5ib2xkKHN1YmplY3QucmVzb3VyY2VUeXBlKSxcbiAgICBjaGFsay5yZWQocmVhc29uKSxcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isHotswappableLambdaFunctionChange = isHotswappableLambdaFunctionChange;
|
|
4
|
-
const stream_1 = require("stream");
|
|
5
4
|
const common_1 = require("./common");
|
|
5
|
+
const tools_1 = require("../../private/tools");
|
|
6
6
|
const toolkit_error_1 = require("../../toolkit/toolkit-error");
|
|
7
7
|
const util_1 = require("../../util");
|
|
8
8
|
const cloudformation_1 = require("../cloudformation");
|
|
9
|
-
// namespace object imports won't work in the bundle for function exports
|
|
10
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
11
|
-
const archiver = require('archiver');
|
|
12
9
|
async function isHotswappableLambdaFunctionChange(logicalId, change, evaluateCfnTemplate) {
|
|
13
10
|
// if the change is for a Lambda Version, we just ignore it
|
|
14
11
|
// we will publish a new version when we get to hotswapping the actual Function this Version points to
|
|
@@ -170,7 +167,7 @@ async function evaluateLambdaFunctionProps(hotswappablePropChanges, runtime, eva
|
|
|
170
167
|
}
|
|
171
168
|
// file extension must be chosen depending on the runtime
|
|
172
169
|
const codeFileExt = determineCodeFileExtFromRuntime(functionRuntime);
|
|
173
|
-
functionCodeZip = await zipString(`index.${codeFileExt}`, functionCode);
|
|
170
|
+
functionCodeZip = await (0, tools_1.zipString)(`index.${codeFileExt}`, functionCode);
|
|
174
171
|
break;
|
|
175
172
|
}
|
|
176
173
|
}
|
|
@@ -196,33 +193,6 @@ async function evaluateLambdaFunctionProps(hotswappablePropChanges, runtime, eva
|
|
|
196
193
|
const configurations = description || environment ? { description, environment } : undefined;
|
|
197
194
|
return code || configurations ? { code, configurations } : undefined;
|
|
198
195
|
}
|
|
199
|
-
/**
|
|
200
|
-
* Compress a string as a file, returning a promise for the zip buffer
|
|
201
|
-
* https://github.com/archiverjs/node-archiver/issues/342
|
|
202
|
-
*/
|
|
203
|
-
function zipString(fileName, rawString) {
|
|
204
|
-
return new Promise((resolve, reject) => {
|
|
205
|
-
const buffers = [];
|
|
206
|
-
const converter = new stream_1.Writable();
|
|
207
|
-
converter._write = (chunk, _, callback) => {
|
|
208
|
-
buffers.push(chunk);
|
|
209
|
-
process.nextTick(callback);
|
|
210
|
-
};
|
|
211
|
-
converter.on('finish', () => {
|
|
212
|
-
resolve(Buffer.concat(buffers));
|
|
213
|
-
});
|
|
214
|
-
const archive = archiver('zip');
|
|
215
|
-
archive.on('error', (err) => {
|
|
216
|
-
reject(err);
|
|
217
|
-
});
|
|
218
|
-
archive.pipe(converter);
|
|
219
|
-
archive.append(rawString, {
|
|
220
|
-
name: fileName,
|
|
221
|
-
date: new Date('1980-01-01T00:00:00.000Z'), // Add date to make resulting zip file deterministic
|
|
222
|
-
});
|
|
223
|
-
void archive.finalize();
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
196
|
/**
|
|
227
197
|
* After a Lambda Function is updated, it cannot be updated again until the
|
|
228
198
|
* `State=Active` and the `LastUpdateStatus=Successful`.
|
|
@@ -291,4 +261,4 @@ async function dependantResources(logicalId, functionName, evaluateCfnTemplate)
|
|
|
291
261
|
...aliases,
|
|
292
262
|
];
|
|
293
263
|
}
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxhbWJkYS1mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSxnRkErSEM7QUE5SUQsbUNBQWtDO0FBSWxDLHFDQUEyQztBQUUzQywrREFBMkQ7QUFDM0QscUNBQXFDO0FBRXJDLHNEQUFnRztBQUVoRyx5RUFBeUU7QUFDekUsaUVBQWlFO0FBQ2pFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUU5QixLQUFLLFVBQVUsa0NBQWtDLENBQ3RELFNBQWlCLEVBQ2pCLE1BQXNCLEVBQ3RCLG1CQUFtRDtJQUVuRCwyREFBMkQ7SUFDM0Qsc0dBQXNHO0lBQ3RHLDBFQUEwRTtJQUMxRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLHNCQUFzQixFQUFFLENBQUM7UUFDcEQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLGdFQUFnRTtJQUNoRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUFFLENBQUM7UUFDbEQsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3JELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFvQixFQUFFLENBQUM7SUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLHdCQUFlLEVBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQzFGLGlCQUFpQixDQUFDLG9DQUFvQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTVELE1BQU0sWUFBWSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsNkJBQTZCLENBQzFFLFNBQVMs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U0FDdkQsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFSixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNqRTtRQUNFLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztRQUN0QixZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUk7UUFDcEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksK0JBQStCLFlBQVksR0FBRztRQUNwRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7S0FDdkQsQ0FDRixDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsR0FBRyxRQUFRO1FBQ1gsR0FBRyxPQUFPO0tBQ1gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5RGlmZmVyZW5jZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgeyBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtbGFtYmRhJztcbmltcG9ydCB0eXBlIHsgSG90c3dhcENoYW5nZSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IGNsYXNzaWZ5Q2hhbmdlcyB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB0eXBlIHsgQWZmZWN0ZWRSZXNvdXJjZSwgUmVzb3VyY2VDaGFuZ2UgfSBmcm9tICcuLi8uLi9wYXlsb2Fkcy9ob3Rzd2FwJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBmbGF0TWFwIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IElMYW1iZGFDbGllbnQsIFNESyB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHsgQ2ZuRXZhbHVhdGlvbkV4Y2VwdGlvbiwgdHlwZSBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5cbi8vIG5hbWVzcGFjZSBvYmplY3QgaW1wb3J0cyB3b24ndCB3b3JrIGluIHRoZSBidW5kbGUgZm9yIGZ1bmN0aW9uIGV4cG9ydHNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBhcmNoaXZlciA9IHJlcXVpcmUoJ2FyY2hpdmVyJyk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0hvdHN3YXBwYWJsZUxhbWJkYUZ1bmN0aW9uQ2hhbmdlKFxuICBsb2dpY2FsSWQ6IHN0cmluZyxcbiAgY2hhbmdlOiBSZXNvdXJjZUNoYW5nZSxcbiAgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuKTogUHJvbWlzZTxIb3Rzd2FwQ2hhbmdlW10+IHtcbiAgLy8gaWYgdGhlIGNoYW5nZSBpcyBmb3IgYSBMYW1iZGEgVmVyc2lvbiwgd2UganVzdCBpZ25vcmUgaXRcbiAgLy8gd2Ugd2lsbCBwdWJsaXNoIGEgbmV3IHZlcnNpb24gd2hlbiB3ZSBnZXQgdG8gaG90c3dhcHBpbmcgdGhlIGFjdHVhbCBGdW5jdGlvbiB0aGlzIFZlcnNpb24gcG9pbnRzIHRvXG4gIC8vIChWZXJzaW9ucyBjYW4ndCBiZSBjaGFuZ2VkIGluIENsb3VkRm9ybWF0aW9uIGFueXdheSwgdGhleSdyZSBpbW11dGFibGUpXG4gIGlmIChjaGFuZ2UubmV3VmFsdWUuVHlwZSA9PT0gJ0FXUzo6TGFtYmRhOjpWZXJzaW9uJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIHdlIGhhbmRsZSBBbGlhc2VzIHNwZWNpYWxseSB0b29cbiAgLy8gdGhlIGFjdHVhbCBhbGlhcyB1cGRhdGUgd2lsbCBoYXBwZW4gaWYgd2UgY2hhbmdlIHRoZSBmdW5jdGlvblxuICBpZiAoY2hhbmdlLm5ld1ZhbHVlLlR5cGUgPT09ICdBV1M6OkxhbWJkYTo6QWxpYXMnKSB7XG4gICAgcmV0dXJuIGNsYXNzaWZ5QWxpYXNDaGFuZ2VzKGNoYW5nZSk7XG4gIH1cblxuICBpZiAoY2hhbmdlLm5ld1ZhbHVlLlR5cGUgIT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcmV0OiBIb3Rzd2FwQ2hhbmdlW10gPSBbXTtcbiAgY29uc3QgY2xhc3NpZmllZENoYW5nZXMgPSBjbGFzc2lmeUNoYW5nZXMoY2hhbmdlLCBbJ0NvZGUnLCAnRW52aXJvbm1lbnQnLCAnRGVzY3JpcHRpb24nXSk7XG4gIGNsYXNzaWZpZWRDaGFuZ2VzLnJlcG9ydE5vbkhvdHN3YXBwYWJsZVByb3BlcnR5Q2hhbmdlcyhyZXQpO1xuXG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXN0YWJsaXNoUmVzb3VyY2VQaHlzaWNhbE5hbWUoXG4gICAgbG9naWNhbElkLFxuICAgIGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5GdW5jdGlvbk5hbWUsXG4gICk7XG4gIGNvbnN0IG5hbWVzT2ZIb3Rzd2FwcGFibGVDaGFuZ2VzID0gT2JqZWN0LmtleXMoY2xhc3NpZmllZENoYW5nZXMuaG90c3dhcHBhYmxlUHJvcHMpO1xuICBpZiAoZnVuY3Rpb25OYW1lICYmIG5hbWVzT2ZIb3Rzd2FwcGFibGVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsYW1iZGFDb2RlQ2hhbmdlID0gYXdhaXQgZXZhbHVhdGVMYW1iZGFGdW5jdGlvblByb3BzKFxuICAgICAgY2xhc3NpZmllZENoYW5nZXMuaG90c3dhcHBhYmxlUHJvcHMsXG4gICAgICBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcz8uUnVudGltZSxcbiAgICAgIGV2YWx1YXRlQ2ZuVGVtcGxhdGUsXG4gICAgKTtcblxuICAgIC8vIG5vdGhpbmcgdG8gZG8gaGVyZVxuICAgIGlmIChsYW1iZGFDb2RlQ2hhbmdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gYXdhaXQgZGVwZW5kYW50UmVzb3VyY2VzKGxvZ2ljYWxJZCwgZnVuY3Rpb25OYW1lLCBldmFsdWF0ZUNmblRlbXBsYXRlKTtcblxuICAgIHJldC5wdXNoKHtcbiAgICAgIGNoYW5nZToge1xuICAgICAgICBjYXVzZTogY2hhbmdlLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgICAgICByZXNvdXJjZVR5cGU6IGNoYW5nZS5uZXdWYWx1ZS5UeXBlLFxuICAgICAgICAgICAgcGh5c2ljYWxOYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICBtZXRhZGF0YTogZXZhbHVhdGVDZm5UZW1wbGF0ZS5tZXRhZGF0YUZvcihsb2dpY2FsSWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uZGVwZW5kZW5jaWVzLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGhvdHN3YXBwYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZpY2U6ICdsYW1iZGEnLFxuICAgICAgYXBwbHk6IGFzeW5jIChzZGs6IFNESykgPT4ge1xuICAgICAgICBjb25zdCBsYW1iZGEgPSBzZGsubGFtYmRhKCk7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbnM6IFByb21pc2U8YW55PltdID0gW107XG5cbiAgICAgICAgaWYgKGxhbWJkYUNvZGVDaGFuZ2UuY29kZSAhPT0gdW5kZWZpbmVkIHx8IGxhbWJkYUNvZGVDaGFuZ2UuY29uZmlndXJhdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChsYW1iZGFDb2RlQ2hhbmdlLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgbGFtYmRhLnVwZGF0ZUZ1bmN0aW9uQ29kZSh7XG4gICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICBTM0J1Y2tldDogbGFtYmRhQ29kZUNoYW5nZS5jb2RlLnMzQnVja2V0LFxuICAgICAgICAgICAgICBTM0tleTogbGFtYmRhQ29kZUNoYW5nZS5jb2RlLnMzS2V5LFxuICAgICAgICAgICAgICBJbWFnZVVyaTogbGFtYmRhQ29kZUNoYW5nZS5jb2RlLmltYWdlVXJpLFxuICAgICAgICAgICAgICBaaXBGaWxlOiBsYW1iZGFDb2RlQ2hhbmdlLmNvZGUuZnVuY3Rpb25Db2RlWmlwLFxuICAgICAgICAgICAgICBTM09iamVjdFZlcnNpb246IGxhbWJkYUNvZGVDaGFuZ2UuY29kZS5zM09iamVjdFZlcnNpb24sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgd2FpdEZvckxhbWJkYXNQcm9wZXJ0aWVzVXBkYXRlVG9GaW5pc2gobGFtYmRhLCBmdW5jdGlvbk5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChsYW1iZGFDb2RlQ2hhbmdlLmNvbmZpZ3VyYXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVJlcXVlc3Q6IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCA9IHtcbiAgICAgICAgICAgICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGxhbWJkYUNvZGVDaGFuZ2UuY29uZmlndXJhdGlvbnMuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cGRhdGVSZXF1ZXN0LkRlc2NyaXB0aW9uID0gbGFtYmRhQ29kZUNoYW5nZS5jb25maWd1cmF0aW9ucy5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYW1iZGFDb2RlQ2hhbmdlLmNvbmZpZ3VyYXRpb25zLmVudmlyb25tZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdXBkYXRlUmVxdWVzdC5FbnZpcm9ubWVudCA9IGxhbWJkYUNvZGVDaGFuZ2UuY29uZmlndXJhdGlvbnMuZW52aXJvbm1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBsYW1iZGEudXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uKHVwZGF0ZVJlcXVlc3QpO1xuICAgICAgICAgICAgYXdhaXQgd2FpdEZvckxhbWJkYXNQcm9wZXJ0aWVzVXBkYXRlVG9GaW5pc2gobGFtYmRhLCBmdW5jdGlvbk5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIG9ubHkgaWYgdGhlIGNvZGUgY2hhbmdlZCBpcyB0aGVyZSBhbnkgcG9pbnQgaW4gcHVibGlzaGluZyBhIG5ldyBWZXJzaW9uXG4gICAgICAgICAgY29uc3QgdmVyc2lvbnMgPSBkZXBlbmRlbmNpZXMuZmlsdGVyKChkKSA9PiBkLnJlc291cmNlVHlwZSA9PT0gJ0FXUzo6TGFtYmRhOjpWZXJzaW9uJyk7XG4gICAgICAgICAgaWYgKHZlcnNpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcHVibGlzaFZlcnNpb25Qcm9taXNlID0gbGFtYmRhLnB1Ymxpc2hWZXJzaW9uKHtcbiAgICAgICAgICAgICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgYWxpYXNlcyA9IGRlcGVuZGVuY2llcy5maWx0ZXIoKGQpID0+IGQucmVzb3VyY2VUeXBlID09PSAnQVdTOjpMYW1iZGE6OkFsaWFzJyk7XG4gICAgICAgICAgICBpZiAoYWxpYXNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgVmVyc2lvbiB0byBmaW5pc2ggcHVibGlzaGluZ1xuICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uVXBkYXRlID0gYXdhaXQgcHVibGlzaFZlcnNpb25Qcm9taXNlO1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICBsYW1iZGEudXBkYXRlQWxpYXMoe1xuICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgTmFtZTogYWxpYXMucGh5c2ljYWxOYW1lLFxuICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblZlcnNpb246IHZlcnNpb25VcGRhdGUuVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9wZXJhdGlvbnMucHVzaChwdWJsaXNoVmVyc2lvblByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJ1biBhbGwgb2Ygb3VyIHVwZGF0ZXMgaW4gcGFyYWxsZWxcbiAgICAgICAgLy8gTGltaXRlZCBzZXQgb2YgdXBkYXRlcyBwZXIgZnVuY3Rpb25cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBjZGtsYWJzL3Byb21pc2VhbGwtbm8tdW5ib3VuZGVkLXBhcmFsbGVsaXNtXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKG9wZXJhdGlvbnMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGljaCBjaGFuZ2VzIHRvIHRoaXMgQWxpYXMgYXJlIGhvdHN3YXBwYWJsZSBvciBub3RcbiAqL1xuZnVuY3Rpb24gY2xhc3NpZnlBbGlhc0NoYW5nZXMoY2hhbmdlOiBSZXNvdXJjZUNoYW5nZSk6IEhvdHN3YXBDaGFuZ2VbXSB7XG4gIGNvbnN0IHJldDogSG90c3dhcENoYW5nZVtdID0gW107XG4gIGNvbnN0IGNsYXNzaWZpZWRDaGFuZ2VzID0gY2xhc3NpZnlDaGFuZ2VzKGNoYW5nZSwgWydGdW5jdGlvblZlcnNpb24nXSk7XG4gIGNsYXNzaWZpZWRDaGFuZ2VzLnJlcG9ydE5vbkhvdHN3YXBwYWJsZVByb3BlcnR5Q2hhbmdlcyhyZXQpO1xuXG4gIC8vIHdlIG9ubHkgd2FudCB0byByZXBvcnQgbm90IGhvdHN3YXBwYWJsZSBjaGFuZ2VzIHRvIGFsaWFzZXNcbiAgLy8gdGhlIGFjdHVhbCBhbGlhcyB1cGRhdGUgd2lsbCBoYXBwZW4gaWYgd2UgY2hhbmdlIHRoZSBmdW5jdGlvblxuXG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIHRoZSBob3Rzd2FwcGFibGUgcHJvcGVydGllcyBvZiBhbiBBV1M6OkxhbWJkYTo6RnVuY3Rpb24gYW5kXG4gKiBSZXR1cm5zIGEgYExhbWJkYUZ1bmN0aW9uQ2hhbmdlYCBpZiB0aGUgY2hhbmdlIGlzIGhvdHN3YXBwYWJsZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGNoYW5nZSBpcyBub3QgaG90c3dhcHBhYmxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBldmFsdWF0ZUxhbWJkYUZ1bmN0aW9uUHJvcHMoXG4gIGhvdHN3YXBwYWJsZVByb3BDaGFuZ2VzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eURpZmZlcmVuY2U8YW55Pj4sXG4gIHJ1bnRpbWU6IHN0cmluZyxcbiAgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuKTogUHJvbWlzZTxMYW1iZGFGdW5jdGlvbkNoYW5nZSB8IHVuZGVmaW5lZD4ge1xuICAvKlxuICAgKiBBdCBmaXJzdCBnbGFuY2UsIHdlIHdvdWxkIHdhbnQgdG8gaW5pdGlhbGl6ZSB0aGVzZSB1c2luZyB0aGUgXCJwcmV2aW91c1wiIHZhbHVlcyAoY2hhbmdlLm9sZFZhbHVlKSxcbiAgICogaW4gY2FzZSBvbmx5IG9uZSBvZiB0aGVtIGNoYW5nZWQsIGxpa2UgdGhlIGtleSwgYW5kIHRoZSBCdWNrZXQgc3RheWVkIHRoZSBzYW1lLlxuICAgKiBIb3dldmVyLCB0aGF0IGFjdHVhbGx5IGZhaWxzIGZvciBvbGQtc3R5bGUgc3ludGhlc2lzLCB3aGljaCB1c2VzIENGTiBQYXJhbWV0ZXJzIVxuICAgKiBCZWNhdXNlIHRoZSBuYW1lcyBvZiB0aGUgUGFyYW1ldGVycyBkZXBlbmQgb24gdGhlIGhhc2ggb2YgdGhlIEFzc2V0LFxuICAgKiB0aGUgUGFyYW1ldGVycyB1c2VkIGZvciB0aGUgXCJvbGRcIiB2YWx1ZXMgbm8gbG9uZ2VyIGV4aXN0IGluIGBhc3NldFBhcmFtc2AgYXQgdGhpcyBwb2ludCxcbiAgICogd2hpY2ggbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0aGUgY29ycmVjdCB2YWx1ZXMgYXZhaWxhYmxlIHRvIGV2YWx1YXRlIHRoZSBDRk4gZXhwcmVzc2lvbiB3aXRoLlxuICAgKiBGb3J0dW5hdGVseSwgdGhlIGRpZmYgd2lsbCBhbHdheXMgaW5jbHVkZSBib3RoIHRoZSBzM0J1Y2tldCBhbmQgczNLZXkgcGFydHMgb2YgdGhlIExhbWJkYSdzIENvZGUgcHJvcGVydHksXG4gICAqIGV2ZW4gaWYgb25seSBvbmUgb2YgdGhlbSB3YXMgYWN0dWFsbHkgY2hhbmdlZCxcbiAgICogd2hpY2ggbWVhbnMgd2UgZG9uJ3QgbmVlZCB0aGUgXCJvbGRcIiB2YWx1ZXMgYXQgYWxsLCBhbmQgd2UgY2FuIHNhZmVseSBpbml0aWFsaXplIHRoZXNlIHdpdGgganVzdCBgJydgLlxuICAgKi9cbiAgbGV0IGNvZGU6IExhbWJkYUZ1bmN0aW9uQ29kZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgbGV0IGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCBlbnZpcm9ubWVudDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IHVwZGF0ZWRQcm9wTmFtZSBpbiBob3Rzd2FwcGFibGVQcm9wQ2hhbmdlcykge1xuICAgIGNvbnN0IHVwZGF0ZWRQcm9wID0gaG90c3dhcHBhYmxlUHJvcENoYW5nZXNbdXBkYXRlZFByb3BOYW1lXTtcblxuICAgIHN3aXRjaCAodXBkYXRlZFByb3BOYW1lKSB7XG4gICAgICBjYXNlICdDb2RlJzpcbiAgICAgICAgbGV0IHMzQnVja2V0LCBzM0tleSwgczNPYmplY3RWZXJzaW9uLCBpbWFnZVVyaSwgZnVuY3Rpb25Db2RlWmlwO1xuXG4gICAgICAgIGZvciAoY29uc3QgbmV3UHJvcE5hbWUgaW4gdXBkYXRlZFByb3AubmV3VmFsdWUpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld1Byb3BOYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdTM0J1Y2tldCc6XG4gICAgICAgICAgICAgIHMzQnVja2V0ID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odXBkYXRlZFByb3AubmV3VmFsdWVbbmV3UHJvcE5hbWVdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdTM0tleSc6XG4gICAgICAgICAgICAgIHMzS2V5ID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odXBkYXRlZFByb3AubmV3VmFsdWVbbmV3UHJvcE5hbWVdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdTM09iamVjdFZlcnNpb24nOlxuICAgICAgICAgICAgICBzM09iamVjdFZlcnNpb24gPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih1cGRhdGVkUHJvcC5uZXdWYWx1ZVtuZXdQcm9wTmFtZV0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0ltYWdlVXJpJzpcbiAgICAgICAgICAgICAgaW1hZ2VVcmkgPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih1cGRhdGVkUHJvcC5uZXdWYWx1ZVtuZXdQcm9wTmFtZV0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1ppcEZpbGUnOlxuICAgICAgICAgICAgICAvLyBXZSBtdXN0IGNyZWF0ZSBhIHppcCBwYWNrYWdlIGNvbnRhaW5pbmcgYSBmaWxlIHdpdGggdGhlIGlubGluZSBjb2RlXG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uQ29kZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlW25ld1Byb3BOYW1lXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uUnVudGltZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHJ1bnRpbWUpO1xuICAgICAgICAgICAgICBpZiAoIWZ1bmN0aW9uUnVudGltZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZmlsZSBleHRlbnNpb24gbXVzdCBiZSBjaG9zZW4gZGVwZW5kaW5nIG9uIHRoZSBydW50aW1lXG4gICAgICAgICAgICAgIGNvbnN0IGNvZGVGaWxlRXh0ID0gZGV0ZXJtaW5lQ29kZUZpbGVFeHRGcm9tUnVudGltZShmdW5jdGlvblJ1bnRpbWUpO1xuICAgICAgICAgICAgICBmdW5jdGlvbkNvZGVaaXAgPSBhd2FpdCB6aXBTdHJpbmcoYGluZGV4LiR7Y29kZUZpbGVFeHR9YCwgZnVuY3Rpb25Db2RlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvZGUgPSB7XG4gICAgICAgICAgczNCdWNrZXQsXG4gICAgICAgICAgczNLZXksXG4gICAgICAgICAgczNPYmplY3RWZXJzaW9uLFxuICAgICAgICAgIGltYWdlVXJpLFxuICAgICAgICAgIGZ1bmN0aW9uQ29kZVppcCxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdEZXNjcmlwdGlvbic6XG4gICAgICAgIGRlc2NyaXB0aW9uID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odXBkYXRlZFByb3AubmV3VmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Vudmlyb25tZW50JzpcbiAgICAgICAgZW52aXJvbm1lbnQgPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih1cGRhdGVkUHJvcC5uZXdWYWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gd2Ugd2lsbCBuZXZlciBnZXQgaGVyZSwgYnV0IGp1c3QgaW4gY2FzZSB3ZSBkbyB0aHJvdyBhbiBlcnJvclxuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgICdVbmV4cGVjdGVkSG90c3dhcFByb3BlcnR5JyxcbiAgICAgICAgICAnd2hpbGUgYXBwbHkoKWluZywgZm91bmQgYSBwcm9wZXJ0eSB0aGF0IGNhbm5vdCBiZSBob3Rzd2FwcGVkLiBQbGVhc2UgcmVwb3J0IHRoaXMgYXQgZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvbmV3L2Nob29zZScsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29uZmlndXJhdGlvbnMgPSBkZXNjcmlwdGlvbiB8fCBlbnZpcm9ubWVudCA/IHsgZGVzY3JpcHRpb24sIGVudmlyb25tZW50IH0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBjb2RlIHx8IGNvbmZpZ3VyYXRpb25zID8geyBjb2RlLCBjb25maWd1cmF0aW9ucyB9IDogdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25Db2RlIHtcbiAgcmVhZG9ubHkgczNCdWNrZXQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHMzS2V5Pzogc3RyaW5nO1xuICByZWFkb25seSBzM09iamVjdFZlcnNpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGltYWdlVXJpPzogc3RyaW5nO1xuICByZWFkb25seSBmdW5jdGlvbkNvZGVaaXA/OiBCdWZmZXI7XG59XG5cbmludGVyZmFjZSBMYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zIHtcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uQ2hhbmdlIHtcbiAgcmVhZG9ubHkgY29kZT86IExhbWJkYUZ1bmN0aW9uQ29kZTtcbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvbnM/OiBMYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zO1xufVxuXG4vKipcbiAqIENvbXByZXNzIGEgc3RyaW5nIGFzIGEgZmlsZSwgcmV0dXJuaW5nIGEgcHJvbWlzZSBmb3IgdGhlIHppcCBidWZmZXJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvaXNzdWVzLzM0MlxuICovXG5mdW5jdGlvbiB6aXBTdHJpbmcoZmlsZU5hbWU6IHN0cmluZywgcmF3U3RyaW5nOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGJ1ZmZlcnM6IEJ1ZmZlcltdID0gW107XG5cbiAgICBjb25zdCBjb252ZXJ0ZXIgPSBuZXcgV3JpdGFibGUoKTtcblxuICAgIGNvbnZlcnRlci5fd3JpdGUgPSAoY2h1bms6IEJ1ZmZlciwgXzogc3RyaW5nLCBjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuICAgICAgYnVmZmVycy5wdXNoKGNodW5rKTtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBjb252ZXJ0ZXIub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChidWZmZXJzKSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhcmNoaXZlID0gYXJjaGl2ZXIoJ3ppcCcpO1xuXG4gICAgYXJjaGl2ZS5vbignZXJyb3InLCAoZXJyOiBhbnkpID0+IHtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH0pO1xuXG4gICAgYXJjaGl2ZS5waXBlKGNvbnZlcnRlcik7XG5cbiAgICBhcmNoaXZlLmFwcGVuZChyYXdTdHJpbmcsIHtcbiAgICAgIG5hbWU6IGZpbGVOYW1lLFxuICAgICAgZGF0ZTogbmV3IERhdGUoJzE5ODAtMDEtMDFUMDA6MDA6MDAuMDAwWicpLCAvLyBBZGQgZGF0ZSB0byBtYWtlIHJlc3VsdGluZyB6aXAgZmlsZSBkZXRlcm1pbmlzdGljXG4gICAgfSk7XG5cbiAgICB2b2lkIGFyY2hpdmUuZmluYWxpemUoKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQWZ0ZXIgYSBMYW1iZGEgRnVuY3Rpb24gaXMgdXBkYXRlZCwgaXQgY2Fubm90IGJlIHVwZGF0ZWQgYWdhaW4gdW50aWwgdGhlXG4gKiBgU3RhdGU9QWN0aXZlYCBhbmQgdGhlIGBMYXN0VXBkYXRlU3RhdHVzPVN1Y2Nlc3NmdWxgLlxuICpcbiAqIERlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgTGFtYmRhIEZ1bmN0aW9uIHRoaXMgY291bGQgaGFwcGVuIHJlbGF0aXZlbHkgcXVpY2tseVxuICogb3IgdmVyeSBzbG93bHkuIEZvciBleGFtcGxlLCBaaXAgYmFzZWQgZnVuY3Rpb25zIF9ub3RfIGluIGEgVlBDIGNhbiB0YWtlIH4xIHNlY29uZCB3aGVyZWFzIFZQQ1xuICogb3IgQ29udGFpbmVyIGZ1bmN0aW9ucyBjYW4gdGFrZSB+MjUgc2Vjb25kcyAoYW5kICdpZGxlJyBWUEMgZnVuY3Rpb25zIGNhbiB0YWtlIG1pbnV0ZXMpLlxuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yTGFtYmRhc1Byb3BlcnRpZXNVcGRhdGVUb0ZpbmlzaChcbiAgbGFtYmRhOiBJTGFtYmRhQ2xpZW50LFxuICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBtaW5EZWxheVNlY29uZHMgPSAxO1xuICBjb25zdCBtYXhEZWxheVNlY29uZHMgPSAxMDtcblxuICBhd2FpdCBsYW1iZGEud2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkKG1pbkRlbGF5U2Vjb25kcywgbWF4RGVsYXlTZWNvbmRzLCB7XG4gICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBmaWxlIGV4dGVuc2lvbiBmcm9tIExhbWJkYSBydW50aW1lIHN0cmluZy5cbiAqIFdlIHVzZSB0aGlzIGV4dGVuc2lvbiB0byBjcmVhdGUgYSBkZXBsb3ltZW50IHBhY2thZ2UgZnJvbSBMYW1iZGEgaW5saW5lIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZUNvZGVGaWxlRXh0RnJvbVJ1bnRpbWUocnVudGltZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHJ1bnRpbWUuc3RhcnRzV2l0aCgnbm9kZScpKSB7XG4gICAgcmV0dXJuICdqcyc7XG4gIH1cbiAgaWYgKHJ1bnRpbWUuc3RhcnRzV2l0aCgncHl0aG9uJykpIHtcbiAgICByZXR1cm4gJ3B5JztcbiAgfVxuICAvLyBDdXJyZW50bHkgaW5saW5lIGNvZGUgb25seSBzdXBwb3J0cyBOb2RlLmpzIGFuZCBQeXRob24sIGlnbm9yaW5nIG90aGVyIHJ1bnRpbWVzLlxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tY29kZS5odG1sI2F3cy1wcm9wZXJ0aWVzLWxhbWJkYS1mdW5jdGlvbi1jb2RlLXByb3BlcnRpZXNcbiAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oXG4gICAgYHJ1bnRpbWUgJHtydW50aW1lfSBpcyB1bnN1cHBvcnRlZCwgb25seSBub2RlLmpzIGFuZCBweXRob24gcnVudGltZXMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuYCxcbiAgKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgVmVyc2lvbnMgdGhhdCByZWZlcmVuY2UgYW4gQVdTOjpMYW1iZGE6OkZ1bmN0aW9uIHdpdGggbG9naWNhbCBJRCBgbG9naWNhbElkYFxuICogYW5kIEFsaWFzZXMgdGhhdCByZWZlcmVuY2UgdGhvc2UgVmVyc2lvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZlcnNpb25zQW5kQWxpYXNlcyhsb2dpY2FsSWQ6IHN0cmluZywgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlKSB7XG4gIC8vIGZpbmQgYWxsIExhbWJkYSBWZXJzaW9ucyB0aGF0IHJlZmVyZW5jZSB0aGlzIEZ1bmN0aW9uXG4gIGNvbnN0IHZlcnNpb25zUmVmZXJlbmNpbmdGdW5jdGlvbiA9IGV2YWx1YXRlQ2ZuVGVtcGxhdGVcbiAgICAuZmluZFJlZmVyZW5jZXNUbyhsb2dpY2FsSWQpXG4gICAgLmZpbHRlcigocikgPT4gci5UeXBlID09PSAnQVdTOjpMYW1iZGE6OlZlcnNpb24nKTtcbiAgLy8gZmluZCBhbGwgTGFtYmRhIEFsaWFzZXMgdGhhdCByZWZlcmVuY2UgdGhlIGFib3ZlIFZlcnNpb25zXG4gIGNvbnN0IGFsaWFzZXNSZWZlcmVuY2luZ1ZlcnNpb25zID0gZmxhdE1hcCh2ZXJzaW9uc1JlZmVyZW5jaW5nRnVuY3Rpb24sIHYgPT5cbiAgICBldmFsdWF0ZUNmblRlbXBsYXRlLmZpbmRSZWZlcmVuY2VzVG8odi5Mb2dpY2FsSWQpKTtcblxuICByZXR1cm4geyB2ZXJzaW9uc1JlZmVyZW5jaW5nRnVuY3Rpb24sIGFsaWFzZXNSZWZlcmVuY2luZ1ZlcnNpb25zIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlcGVuZGFudFJlc291cmNlcyhcbiAgbG9naWNhbElkOiBzdHJpbmcsXG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPEFycmF5PEFmZmVjdGVkUmVzb3VyY2U+PiB7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBhd2FpdCB2ZXJzaW9uc0FuZEFsaWFzZXMobG9naWNhbElkLCBldmFsdWF0ZUNmblRlbXBsYXRlKTtcblxuICAvLyBMaW1pdGVkIHNldCBvZiB1cGRhdGVzIHBlciBmdW5jdGlvblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgY29uc3QgYWxpYXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKGNhbmRpZGF0ZXMuYWxpYXNlc1JlZmVyZW5jaW5nVmVyc2lvbnMubWFwKGFzeW5jIChhKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGEuUHJvcGVydGllcz8uTmFtZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvZ2ljYWxJZDogYS5Mb2dpY2FsSWQsXG4gICAgICByZXNvdXJjZVR5cGU6IGEuVHlwZSxcbiAgICAgIHBoeXNpY2FsTmFtZTogbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHthLlR5cGV9ICcke25hbWV9JyBmb3IgQVdTOjpMYW1iZGE6OkZ1bmN0aW9uICcke2Z1bmN0aW9uTmFtZX0nYCxcbiAgICAgIG1ldGFkYXRhOiBldmFsdWF0ZUNmblRlbXBsYXRlLm1ldGFkYXRhRm9yKGEuTG9naWNhbElkKSxcbiAgICB9O1xuICB9KSk7XG5cbiAgY29uc3QgdmVyc2lvbnMgPSBjYW5kaWRhdGVzLnZlcnNpb25zUmVmZXJlbmNpbmdGdW5jdGlvbi5tYXAoKHYpID0+IChcbiAgICB7XG4gICAgICBsb2dpY2FsSWQ6IHYuTG9naWNhbElkLFxuICAgICAgcmVzb3VyY2VUeXBlOiB2LlR5cGUsXG4gICAgICBkZXNjcmlwdGlvbjogYCR7di5UeXBlfSBmb3IgQVdTOjpMYW1iZGE6OkZ1bmN0aW9uICcke2Z1bmN0aW9uTmFtZX0nYCxcbiAgICAgIG1ldGFkYXRhOiBldmFsdWF0ZUNmblRlbXBsYXRlLm1ldGFkYXRhRm9yKHYuTG9naWNhbElkKSxcbiAgICB9XG4gICkpO1xuXG4gIHJldHVybiBbXG4gICAgLi4udmVyc2lvbnMsXG4gICAgLi4uYWxpYXNlcyxcbiAgXTtcbn1cbiJdfQ==
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxhbWJkYS1mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFXQSxnRkErSEM7QUF2SUQscUNBQTJDO0FBRTNDLCtDQUFnRDtBQUNoRCwrREFBMkQ7QUFDM0QscUNBQXFDO0FBRXJDLHNEQUFnRztBQUV6RixLQUFLLFVBQVUsa0NBQWtDLENBQ3RELFNBQWlCLEVBQ2pCLE1BQXNCLEVBQ3RCLG1CQUFtRDtJQUVuRCwyREFBMkQ7SUFDM0Qsc0dBQXNHO0lBQ3RHLDBFQUEwRTtJQUMxRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLHNCQUFzQixFQUFFLENBQUM7UUFDcEQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLGdFQUFnRTtJQUNoRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUFFLENBQUM7UUFDbEQsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3JELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFvQixFQUFFLENBQUM7SUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLHdCQUFlLEVBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQzFGLGlCQUFpQixDQUFDLG9DQUFvQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTVELE1BQU0sWUFBWSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsNkJBQTZCLENBQzFFLFNBQVMsRUFDVCxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQ3pDLENBQUM7SUFDRixNQUFNLDBCQUEwQixHQUFH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Q0FBQyxDQUFDLENBQUMsQ0FBQztJQUVKLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ2pFO1FBQ0UsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO1FBQ3RCLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSTtRQUNwQixXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSwrQkFBK0IsWUFBWSxHQUFHO1FBQ3BFLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztLQUN2RCxDQUNGLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxHQUFHLE9BQU87S0FDWCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHlEaWZmZXJlbmNlIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSB7IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1sYW1iZGEnO1xuaW1wb3J0IHR5cGUgeyBIb3Rzd2FwQ2hhbmdlIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgY2xhc3NpZnlDaGFuZ2VzIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHR5cGUgeyBBZmZlY3RlZFJlc291cmNlLCBSZXNvdXJjZUNoYW5nZSB9IGZyb20gJy4uLy4uL3BheWxvYWRzL2hvdHN3YXAnO1xuaW1wb3J0IHsgemlwU3RyaW5nIH0gZnJvbSAnLi4vLi4vcHJpdmF0ZS90b29scyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgZmxhdE1hcCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBJTGFtYmRhQ2xpZW50LCBTREsgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IENmbkV2YWx1YXRpb25FeGNlcHRpb24sIHR5cGUgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlIH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24nO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsXG4gIGNoYW5nZTogUmVzb3VyY2VDaGFuZ2UsXG4gIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8SG90c3dhcENoYW5nZVtdPiB7XG4gIC8vIGlmIHRoZSBjaGFuZ2UgaXMgZm9yIGEgTGFtYmRhIFZlcnNpb24sIHdlIGp1c3QgaWdub3JlIGl0XG4gIC8vIHdlIHdpbGwgcHVibGlzaCBhIG5ldyB2ZXJzaW9uIHdoZW4gd2UgZ2V0IHRvIGhvdHN3YXBwaW5nIHRoZSBhY3R1YWwgRnVuY3Rpb24gdGhpcyBWZXJzaW9uIHBvaW50cyB0b1xuICAvLyAoVmVyc2lvbnMgY2FuJ3QgYmUgY2hhbmdlZCBpbiBDbG91ZEZvcm1hdGlvbiBhbnl3YXksIHRoZXkncmUgaW1tdXRhYmxlKVxuICBpZiAoY2hhbmdlLm5ld1ZhbHVlLlR5cGUgPT09ICdBV1M6OkxhbWJkYTo6VmVyc2lvbicpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyB3ZSBoYW5kbGUgQWxpYXNlcyBzcGVjaWFsbHkgdG9vXG4gIC8vIHRoZSBhY3R1YWwgYWxpYXMgdXBkYXRlIHdpbGwgaGFwcGVuIGlmIHdlIGNoYW5nZSB0aGUgZnVuY3Rpb25cbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpMYW1iZGE6OkFsaWFzJykge1xuICAgIHJldHVybiBjbGFzc2lmeUFsaWFzQ2hhbmdlcyhjaGFuZ2UpO1xuICB9XG5cbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlICE9PSAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHJldDogSG90c3dhcENoYW5nZVtdID0gW107XG4gIGNvbnN0IGNsYXNzaWZpZWRDaGFuZ2VzID0gY2xhc3NpZnlDaGFuZ2VzKGNoYW5nZSwgWydDb2RlJywgJ0Vudmlyb25tZW50JywgJ0Rlc2NyaXB0aW9uJ10pO1xuICBjbGFzc2lmaWVkQ2hhbmdlcy5yZXBvcnROb25Ib3Rzd2FwcGFibGVQcm9wZXJ0eUNoYW5nZXMocmV0KTtcblxuICBjb25zdCBmdW5jdGlvbk5hbWUgPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmVzdGFibGlzaFJlc291cmNlUGh5c2ljYWxOYW1lKFxuICAgIGxvZ2ljYWxJZCxcbiAgICBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcz8uRnVuY3Rpb25OYW1lLFxuICApO1xuICBjb25zdCBuYW1lc09mSG90c3dhcHBhYmxlQ2hhbmdlcyA9IE9iamVjdC5rZXlzKGNsYXNzaWZpZWRDaGFuZ2VzLmhvdHN3YXBwYWJsZVByb3BzKTtcbiAgaWYgKGZ1bmN0aW9uTmFtZSAmJiBuYW1lc09mSG90c3dhcHBhYmxlQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbGFtYmRhQ29kZUNoYW5nZSA9IGF3YWl0IGV2YWx1YXRlTGFtYmRhRnVuY3Rpb25Qcm9wcyhcbiAgICAgIGNsYXNzaWZpZWRDaGFuZ2VzLmhvdHN3YXBwYWJsZVByb3BzLFxuICAgICAgY2hhbmdlLm5ld1ZhbHVlLlByb3BlcnRpZXM/LlJ1bnRpbWUsXG4gICAgICBldmFsdWF0ZUNmblRlbXBsYXRlLFxuICAgICk7XG5cbiAgICAvLyBub3RoaW5nIHRvIGRvIGhlcmVcbiAgICBpZiAobGFtYmRhQ29kZUNoYW5nZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IGF3YWl0IGRlcGVuZGFudFJlc291cmNlcyhsb2dpY2FsSWQsIGZ1bmN0aW9uTmFtZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZSk7XG5cbiAgICByZXQucHVzaCh7XG4gICAgICBjaGFuZ2U6IHtcbiAgICAgICAgY2F1c2U6IGNoYW5nZSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiBjaGFuZ2UubmV3VmFsdWUuVHlwZSxcbiAgICAgICAgICAgIHBoeXNpY2FsTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3IobG9naWNhbElkKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmRlcGVuZGVuY2llcyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBob3Rzd2FwcGFibGU6IHRydWUsXG4gICAgICBzZXJ2aWNlOiAnbGFtYmRhJyxcbiAgICAgIGFwcGx5OiBhc3luYyAoc2RrOiBTREspID0+IHtcbiAgICAgICAgY29uc3QgbGFtYmRhID0gc2RrLmxhbWJkYSgpO1xuICAgICAgICBjb25zdCBvcGVyYXRpb25zOiBQcm9taXNlPGFueT5bXSA9IFtdO1xuXG4gICAgICAgIGlmIChsYW1iZGFDb2RlQ2hhbmdlLmNvZGUgIT09IHVuZGVmaW5lZCB8fCBsYW1iZGFDb2RlQ2hhbmdlLmNvbmZpZ3VyYXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAobGFtYmRhQ29kZUNoYW5nZS5jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IGxhbWJkYS51cGRhdGVGdW5jdGlvbkNvZGUoe1xuICAgICAgICAgICAgICBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgUzNCdWNrZXQ6IGxhbWJkYUNvZGVDaGFuZ2UuY29kZS5zM0J1Y2tldCxcbiAgICAgICAgICAgICAgUzNLZXk6IGxhbWJkYUNvZGVDaGFuZ2UuY29kZS5zM0tleSxcbiAgICAgICAgICAgICAgSW1hZ2VVcmk6IGxhbWJkYUNvZGVDaGFuZ2UuY29kZS5pbWFnZVVyaSxcbiAgICAgICAgICAgICAgWmlwRmlsZTogbGFtYmRhQ29kZUNoYW5nZS5jb2RlLmZ1bmN0aW9uQ29kZVppcCxcbiAgICAgICAgICAgICAgUzNPYmplY3RWZXJzaW9uOiBsYW1iZGFDb2RlQ2hhbmdlLmNvZGUuczNPYmplY3RWZXJzaW9uLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JMYW1iZGFzUHJvcGVydGllc1VwZGF0ZVRvRmluaXNoKGxhbWJkYSwgZnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobGFtYmRhQ29kZUNoYW5nZS5jb25maWd1cmF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVSZXF1ZXN0OiBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQgPSB7XG4gICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsYW1iZGFDb2RlQ2hhbmdlLmNvbmZpZ3VyYXRpb25zLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdXBkYXRlUmVxdWVzdC5EZXNjcmlwdGlvbiA9IGxhbWJkYUNvZGVDaGFuZ2UuY29uZmlndXJhdGlvbnMuZGVzY3JpcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGFtYmRhQ29kZUNoYW5nZS5jb25maWd1cmF0aW9ucy5lbnZpcm9ubWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZVJlcXVlc3QuRW52aXJvbm1lbnQgPSBsYW1iZGFDb2RlQ2hhbmdlLmNvbmZpZ3VyYXRpb25zLmVudmlyb25tZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgbGFtYmRhLnVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbih1cGRhdGVSZXF1ZXN0KTtcbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JMYW1iZGFzUHJvcGVydGllc1VwZGF0ZVRvRmluaXNoKGxhbWJkYSwgZnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBvbmx5IGlmIHRoZSBjb2RlIGNoYW5nZWQgaXMgdGhlcmUgYW55IHBvaW50IGluIHB1Ymxpc2hpbmcgYSBuZXcgVmVyc2lvblxuICAgICAgICAgIGNvbnN0IHZlcnNpb25zID0gZGVwZW5kZW5jaWVzLmZpbHRlcigoZCkgPT4gZC5yZXNvdXJjZVR5cGUgPT09ICdBV1M6OkxhbWJkYTo6VmVyc2lvbicpO1xuICAgICAgICAgIGlmICh2ZXJzaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHB1Ymxpc2hWZXJzaW9uUHJvbWlzZSA9IGxhbWJkYS5wdWJsaXNoVmVyc2lvbih7XG4gICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFsaWFzZXMgPSBkZXBlbmRlbmNpZXMuZmlsdGVyKChkKSA9PiBkLnJlc291cmNlVHlwZSA9PT0gJ0FXUzo6TGFtYmRhOjpBbGlhcycpO1xuICAgICAgICAgICAgaWYgKGFsaWFzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIFZlcnNpb24gdG8gZmluaXNoIHB1Ymxpc2hpbmdcbiAgICAgICAgICAgICAgY29uc3QgdmVyc2lvblVwZGF0ZSA9IGF3YWl0IHB1Ymxpc2hWZXJzaW9uUHJvbWlzZTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzKSB7XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgbGFtYmRhLnVwZGF0ZUFsaWFzKHtcbiAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIE5hbWU6IGFsaWFzLnBoeXNpY2FsTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25WZXJzaW9uOiB2ZXJzaW9uVXBkYXRlLlZlcnNpb24sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvcGVyYXRpb25zLnB1c2gocHVibGlzaFZlcnNpb25Qcm9taXNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBydW4gYWxsIG9mIG91ciB1cGRhdGVzIGluIHBhcmFsbGVsXG4gICAgICAgIC8vIExpbWl0ZWQgc2V0IG9mIHVwZGF0ZXMgcGVyIGZ1bmN0aW9uXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9wcm9taXNlYWxsLW5vLXVuYm91bmRlZC1wYXJhbGxlbGlzbVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChvcGVyYXRpb25zKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hpY2ggY2hhbmdlcyB0byB0aGlzIEFsaWFzIGFyZSBob3Rzd2FwcGFibGUgb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGNsYXNzaWZ5QWxpYXNDaGFuZ2VzKGNoYW5nZTogUmVzb3VyY2VDaGFuZ2UpOiBIb3Rzd2FwQ2hhbmdlW10ge1xuICBjb25zdCByZXQ6IEhvdHN3YXBDaGFuZ2VbXSA9IFtdO1xuICBjb25zdCBjbGFzc2lmaWVkQ2hhbmdlcyA9IGNsYXNzaWZ5Q2hhbmdlcyhjaGFuZ2UsIFsnRnVuY3Rpb25WZXJzaW9uJ10pO1xuICBjbGFzc2lmaWVkQ2hhbmdlcy5yZXBvcnROb25Ib3Rzd2FwcGFibGVQcm9wZXJ0eUNoYW5nZXMocmV0KTtcblxuICAvLyB3ZSBvbmx5IHdhbnQgdG8gcmVwb3J0IG5vdCBob3Rzd2FwcGFibGUgY2hhbmdlcyB0byBhbGlhc2VzXG4gIC8vIHRoZSBhY3R1YWwgYWxpYXMgdXBkYXRlIHdpbGwgaGFwcGVuIGlmIHdlIGNoYW5nZSB0aGUgZnVuY3Rpb25cblxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEV2YWx1YXRlcyB0aGUgaG90c3dhcHBhYmxlIHByb3BlcnRpZXMgb2YgYW4gQVdTOjpMYW1iZGE6OkZ1bmN0aW9uIGFuZFxuICogUmV0dXJucyBhIGBMYW1iZGFGdW5jdGlvbkNoYW5nZWAgaWYgdGhlIGNoYW5nZSBpcyBob3Rzd2FwcGFibGUuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBjaGFuZ2UgaXMgbm90IGhvdHN3YXBwYWJsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXZhbHVhdGVMYW1iZGFGdW5jdGlvblByb3BzKFxuICBob3Rzd2FwcGFibGVQcm9wQ2hhbmdlczogUmVjb3JkPHN0cmluZywgUHJvcGVydHlEaWZmZXJlbmNlPGFueT4+LFxuICBydW50aW1lOiBzdHJpbmcsXG4gIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8TGFtYmRhRnVuY3Rpb25DaGFuZ2UgfCB1bmRlZmluZWQ+IHtcbiAgLypcbiAgICogQXQgZmlyc3QgZ2xhbmNlLCB3ZSB3b3VsZCB3YW50IHRvIGluaXRpYWxpemUgdGhlc2UgdXNpbmcgdGhlIFwicHJldmlvdXNcIiB2YWx1ZXMgKGNoYW5nZS5vbGRWYWx1ZSksXG4gICAqIGluIGNhc2Ugb25seSBvbmUgb2YgdGhlbSBjaGFuZ2VkLCBsaWtlIHRoZSBrZXksIGFuZCB0aGUgQnVja2V0IHN0YXllZCB0aGUgc2FtZS5cbiAgICogSG93ZXZlciwgdGhhdCBhY3R1YWxseSBmYWlscyBmb3Igb2xkLXN0eWxlIHN5bnRoZXNpcywgd2hpY2ggdXNlcyBDRk4gUGFyYW1ldGVycyFcbiAgICogQmVjYXVzZSB0aGUgbmFtZXMgb2YgdGhlIFBhcmFtZXRlcnMgZGVwZW5kIG9uIHRoZSBoYXNoIG9mIHRoZSBBc3NldCxcbiAgICogdGhlIFBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIFwib2xkXCIgdmFsdWVzIG5vIGxvbmdlciBleGlzdCBpbiBgYXNzZXRQYXJhbXNgIGF0IHRoaXMgcG9pbnQsXG4gICAqIHdoaWNoIG1lYW5zIHdlIGRvbid0IGhhdmUgdGhlIGNvcnJlY3QgdmFsdWVzIGF2YWlsYWJsZSB0byBldmFsdWF0ZSB0aGUgQ0ZOIGV4cHJlc3Npb24gd2l0aC5cbiAgICogRm9ydHVuYXRlbHksIHRoZSBkaWZmIHdpbGwgYWx3YXlzIGluY2x1ZGUgYm90aCB0aGUgczNCdWNrZXQgYW5kIHMzS2V5IHBhcnRzIG9mIHRoZSBMYW1iZGEncyBDb2RlIHByb3BlcnR5LFxuICAgKiBldmVuIGlmIG9ubHkgb25lIG9mIHRoZW0gd2FzIGFjdHVhbGx5IGNoYW5nZWQsXG4gICAqIHdoaWNoIG1lYW5zIHdlIGRvbid0IG5lZWQgdGhlIFwib2xkXCIgdmFsdWVzIGF0IGFsbCwgYW5kIHdlIGNhbiBzYWZlbHkgaW5pdGlhbGl6ZSB0aGVzZSB3aXRoIGp1c3QgYCcnYC5cbiAgICovXG4gIGxldCBjb2RlOiBMYW1iZGFGdW5jdGlvbkNvZGUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBsZXQgZW52aXJvbm1lbnQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCB1cGRhdGVkUHJvcE5hbWUgaW4gaG90c3dhcHBhYmxlUHJvcENoYW5nZXMpIHtcbiAgICBjb25zdCB1cGRhdGVkUHJvcCA9IGhvdHN3YXBwYWJsZVByb3BDaGFuZ2VzW3VwZGF0ZWRQcm9wTmFtZV07XG5cbiAgICBzd2l0Y2ggKHVwZGF0ZWRQcm9wTmFtZSkge1xuICAgICAgY2FzZSAnQ29kZSc6XG4gICAgICAgIGxldCBzM0J1Y2tldCwgczNLZXksIHMzT2JqZWN0VmVyc2lvbiwgaW1hZ2VVcmksIGZ1bmN0aW9uQ29kZVppcDtcblxuICAgICAgICBmb3IgKGNvbnN0IG5ld1Byb3BOYW1lIGluIHVwZGF0ZWRQcm9wLm5ld1ZhbHVlKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdQcm9wTmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnUzNCdWNrZXQnOlxuICAgICAgICAgICAgICBzM0J1Y2tldCA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlW25ld1Byb3BOYW1lXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUzNLZXknOlxuICAgICAgICAgICAgICBzM0tleSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlW25ld1Byb3BOYW1lXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUzNPYmplY3RWZXJzaW9uJzpcbiAgICAgICAgICAgICAgczNPYmplY3RWZXJzaW9uID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odXBkYXRlZFByb3AubmV3VmFsdWVbbmV3UHJvcE5hbWVdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJbWFnZVVyaSc6XG4gICAgICAgICAgICAgIGltYWdlVXJpID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odXBkYXRlZFByb3AubmV3VmFsdWVbbmV3UHJvcE5hbWVdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdaaXBGaWxlJzpcbiAgICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgYSB6aXAgcGFja2FnZSBjb250YWluaW5nIGEgZmlsZSB3aXRoIHRoZSBpbmxpbmUgY29kZVxuICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbkNvZGUgPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih1cGRhdGVkUHJvcC5uZXdWYWx1ZVtuZXdQcm9wTmFtZV0pO1xuICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvblJ1bnRpbWUgPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihydW50aW1lKTtcbiAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvblJ1bnRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGZpbGUgZXh0ZW5zaW9uIG11c3QgYmUgY2hvc2VuIGRlcGVuZGluZyBvbiB0aGUgcnVudGltZVxuICAgICAgICAgICAgICBjb25zdCBjb2RlRmlsZUV4dCA9IGRldGVybWluZUNvZGVGaWxlRXh0RnJvbVJ1bnRpbWUoZnVuY3Rpb25SdW50aW1lKTtcbiAgICAgICAgICAgICAgZnVuY3Rpb25Db2RlWmlwID0gYXdhaXQgemlwU3RyaW5nKGBpbmRleC4ke2NvZGVGaWxlRXh0fWAsIGZ1bmN0aW9uQ29kZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2RlID0ge1xuICAgICAgICAgIHMzQnVja2V0LFxuICAgICAgICAgIHMzS2V5LFxuICAgICAgICAgIHMzT2JqZWN0VmVyc2lvbixcbiAgICAgICAgICBpbWFnZVVyaSxcbiAgICAgICAgICBmdW5jdGlvbkNvZGVaaXAsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRGVzY3JpcHRpb24nOlxuICAgICAgICBkZXNjcmlwdGlvbiA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFbnZpcm9ubWVudCc6XG4gICAgICAgIGVudmlyb25tZW50ID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odXBkYXRlZFByb3AubmV3VmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUsIGJ1dCBqdXN0IGluIGNhc2Ugd2UgZG8gdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgICAnVW5leHBlY3RlZEhvdHN3YXBQcm9wZXJ0eScsXG4gICAgICAgICAgJ3doaWxlIGFwcGx5KClpbmcsIGZvdW5kIGEgcHJvcGVydHkgdGhhdCBjYW5ub3QgYmUgaG90c3dhcHBlZC4gUGxlYXNlIHJlcG9ydCB0aGlzIGF0IGdpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzL25ldy9jaG9vc2UnLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbmZpZ3VyYXRpb25zID0gZGVzY3JpcHRpb24gfHwgZW52aXJvbm1lbnQgPyB7IGRlc2NyaXB0aW9uLCBlbnZpcm9ubWVudCB9IDogdW5kZWZpbmVkO1xuICByZXR1cm4gY29kZSB8fCBjb25maWd1cmF0aW9ucyA/IHsgY29kZSwgY29uZmlndXJhdGlvbnMgfSA6IHVuZGVmaW5lZDtcbn1cblxuaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uQ29kZSB7XG4gIHJlYWRvbmx5IHMzQnVja2V0Pzogc3RyaW5nO1xuICByZWFkb25seSBzM0tleT86IHN0cmluZztcbiAgcmVhZG9ubHkgczNPYmplY3RWZXJzaW9uPzogc3RyaW5nO1xuICByZWFkb25seSBpbWFnZVVyaT86IHN0cmluZztcbiAgcmVhZG9ubHkgZnVuY3Rpb25Db2RlWmlwPzogQnVmZmVyO1xufVxuXG5pbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9ucyB7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmludGVyZmFjZSBMYW1iZGFGdW5jdGlvbkNoYW5nZSB7XG4gIHJlYWRvbmx5IGNvZGU/OiBMYW1iZGFGdW5jdGlvbkNvZGU7XG4gIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25zPzogTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9ucztcbn1cblxuLyoqXG4gKiBBZnRlciBhIExhbWJkYSBGdW5jdGlvbiBpcyB1cGRhdGVkLCBpdCBjYW5ub3QgYmUgdXBkYXRlZCBhZ2FpbiB1bnRpbCB0aGVcbiAqIGBTdGF0ZT1BY3RpdmVgIGFuZCB0aGUgYExhc3RVcGRhdGVTdGF0dXM9U3VjY2Vzc2Z1bGAuXG4gKlxuICogRGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBMYW1iZGEgRnVuY3Rpb24gdGhpcyBjb3VsZCBoYXBwZW4gcmVsYXRpdmVseSBxdWlja2x5XG4gKiBvciB2ZXJ5IHNsb3dseS4gRm9yIGV4YW1wbGUsIFppcCBiYXNlZCBmdW5jdGlvbnMgX25vdF8gaW4gYSBWUEMgY2FuIHRha2UgfjEgc2Vjb25kIHdoZXJlYXMgVlBDXG4gKiBvciBDb250YWluZXIgZnVuY3Rpb25zIGNhbiB0YWtlIH4yNSBzZWNvbmRzIChhbmQgJ2lkbGUnIFZQQyBmdW5jdGlvbnMgY2FuIHRha2UgbWludXRlcykuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JMYW1iZGFzUHJvcGVydGllc1VwZGF0ZVRvRmluaXNoKFxuICBsYW1iZGE6IElMYW1iZGFDbGllbnQsXG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG1pbkRlbGF5U2Vjb25kcyA9IDE7XG4gIGNvbnN0IG1heERlbGF5U2Vjb25kcyA9IDEwO1xuXG4gIGF3YWl0IGxhbWJkYS53YWl0VW50aWxGdW5jdGlvblVwZGF0ZWQobWluRGVsYXlTZWNvbmRzLCBtYXhEZWxheVNlY29uZHMsIHtcbiAgICBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGZpbGUgZXh0ZW5zaW9uIGZyb20gTGFtYmRhIHJ1bnRpbWUgc3RyaW5nLlxuICogV2UgdXNlIHRoaXMgZXh0ZW5zaW9uIHRvIGNyZWF0ZSBhIGRlcGxveW1lbnQgcGFja2FnZSBmcm9tIExhbWJkYSBpbmxpbmUgY29kZS5cbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lQ29kZUZpbGVFeHRGcm9tUnVudGltZShydW50aW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocnVudGltZS5zdGFydHNXaXRoKCdub2RlJykpIHtcbiAgICByZXR1cm4gJ2pzJztcbiAgfVxuICBpZiAocnVudGltZS5zdGFydHNXaXRoKCdweXRob24nKSkge1xuICAgIHJldHVybiAncHknO1xuICB9XG4gIC8vIEN1cnJlbnRseSBpbmxpbmUgY29kZSBvbmx5IHN1cHBvcnRzIE5vZGUuanMgYW5kIFB5dGhvbiwgaWdub3Jpbmcgb3RoZXIgcnVudGltZXMuXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWxhbWJkYS1mdW5jdGlvbi1jb2RlLmh0bWwjYXdzLXByb3BlcnRpZXMtbGFtYmRhLWZ1bmN0aW9uLWNvZGUtcHJvcGVydGllc1xuICB0aHJvdyBuZXcgQ2ZuRXZhbHVhdGlvbkV4Y2VwdGlvbihcbiAgICBgcnVudGltZSAke3J1bnRpbWV9IGlzIHVuc3VwcG9ydGVkLCBvbmx5IG5vZGUuanMgYW5kIHB5dGhvbiBydW50aW1lcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC5gLFxuICApO1xufVxuXG4vKipcbiAqIEZpbmRzIGFsbCBWZXJzaW9ucyB0aGF0IHJlZmVyZW5jZSBhbiBBV1M6OkxhbWJkYTo6RnVuY3Rpb24gd2l0aCBsb2dpY2FsIElEIGBsb2dpY2FsSWRgXG4gKiBhbmQgQWxpYXNlcyB0aGF0IHJlZmVyZW5jZSB0aG9zZSBWZXJzaW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdmVyc2lvbnNBbmRBbGlhc2VzKGxvZ2ljYWxJZDogc3RyaW5nLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUpIHtcbiAgLy8gZmluZCBhbGwgTGFtYmRhIFZlcnNpb25zIHRoYXQgcmVmZXJlbmNlIHRoaXMgRnVuY3Rpb25cbiAgY29uc3QgdmVyc2lvbnNSZWZlcmVuY2luZ0Z1bmN0aW9uID0gZXZhbHVhdGVDZm5UZW1wbGF0ZVxuICAgIC5maW5kUmVmZXJlbmNlc1RvKGxvZ2ljYWxJZClcbiAgICAuZmlsdGVyKChyKSA9PiByLlR5cGUgPT09ICdBV1M6OkxhbWJkYTo6VmVyc2lvbicpO1xuICAvLyBmaW5kIGFsbCBMYW1iZGEgQWxpYXNlcyB0aGF0IHJlZmVyZW5jZSB0aGUgYWJvdmUgVmVyc2lvbnNcbiAgY29uc3QgYWxpYXNlc1JlZmVyZW5jaW5nVmVyc2lvbnMgPSBmbGF0TWFwKHZlcnNpb25zUmVmZXJlbmNpbmdGdW5jdGlvbiwgdiA9PlxuICAgIGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZmluZFJlZmVyZW5jZXNUbyh2LkxvZ2ljYWxJZCkpO1xuXG4gIHJldHVybiB7IHZlcnNpb25zUmVmZXJlbmNpbmdGdW5jdGlvbiwgYWxpYXNlc1JlZmVyZW5jaW5nVmVyc2lvbnMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVwZW5kYW50UmVzb3VyY2VzKFxuICBsb2dpY2FsSWQ6IHN0cmluZyxcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8QXJyYXk8QWZmZWN0ZWRSZXNvdXJjZT4+IHtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IGF3YWl0IHZlcnNpb25zQW5kQWxpYXNlcyhsb2dpY2FsSWQsIGV2YWx1YXRlQ2ZuVGVtcGxhdGUpO1xuXG4gIC8vIExpbWl0ZWQgc2V0IG9mIHVwZGF0ZXMgcGVyIGZ1bmN0aW9uXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9wcm9taXNlYWxsLW5vLXVuYm91bmRlZC1wYXJhbGxlbGlzbVxuICBjb25zdCBhbGlhc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2FuZGlkYXRlcy5hbGlhc2VzUmVmZXJlbmNpbmdWZXJzaW9ucy5tYXAoYXN5bmMgKGEpID0+IHtcbiAgICBjb25zdCBuYW1lID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oYS5Qcm9wZXJ0aWVzPy5OYW1lKTtcbiAgICByZXR1cm4ge1xuICAgICAgbG9naWNhbElkOiBhLkxvZ2ljYWxJZCxcbiAgICAgIHJlc291cmNlVHlwZTogYS5UeXBlLFxuICAgICAgcGh5c2ljYWxOYW1lOiBuYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGAke2EuVHlwZX0gJyR7bmFtZX0nIGZvciBBV1M6OkxhbWJkYTo6RnVuY3Rpb24gJyR7ZnVuY3Rpb25OYW1lfSdgLFxuICAgICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3IoYS5Mb2dpY2FsSWQpLFxuICAgIH07XG4gIH0pKTtcblxuICBjb25zdCB2ZXJzaW9ucyA9IGNhbmRpZGF0ZXMudmVyc2lvbnNSZWZlcmVuY2luZ0Z1bmN0aW9uLm1hcCgodikgPT4gKFxuICAgIHtcbiAgICAgIGxvZ2ljYWxJZDogdi5Mb2dpY2FsSWQsXG4gICAgICByZXNvdXJjZVR5cGU6IHYuVHlwZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHt2LlR5cGV9IGZvciBBV1M6OkxhbWJkYTo6RnVuY3Rpb24gJyR7ZnVuY3Rpb25OYW1lfSdgLFxuICAgICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3Iodi5Mb2dpY2FsSWQpLFxuICAgIH1cbiAgKSk7XG5cbiAgcmV0dXJuIFtcbiAgICAuLi52ZXJzaW9ucyxcbiAgICAuLi5hbGlhc2VzLFxuICBdO1xufVxuIl19
|
|
@@ -16,9 +16,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./io-host-wrappers"), exports);
|
|
18
18
|
__exportStar(require("./io-helper"), exports);
|
|
19
|
+
__exportStar(require("./io-default-messages"), exports);
|
|
19
20
|
__exportStar(require("./level-priority"), exports);
|
|
20
21
|
__exportStar(require("./span"), exports);
|
|
21
22
|
__exportStar(require("./message-maker"), exports);
|
|
22
23
|
__exportStar(require("./messages"), exports);
|
|
23
24
|
__exportStar(require("./types"), exports);
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQW1DO0FBQ25DLDhDQUE0QjtBQUM1Qix3REFBc0M7QUFDdEMsbURBQWlDO0FBQ2pDLHlDQUF1QjtBQUN2QixrREFBZ0M7QUFDaEMsNkNBQTJCO0FBQzNCLDBDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW8taG9zdC13cmFwcGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2lvLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2lvLWRlZmF1bHQtbWVzc2FnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9sZXZlbC1wcmlvcml0eSc7XG5leHBvcnQgKiBmcm9tICcuL3NwYW4nO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlLW1ha2VyJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG4iXX0=
|
|
@@ -119,6 +119,7 @@ export declare const IO: {
|
|
|
119
119
|
CDK_TOOLKIT_I9600: make.IoMessageMaker<ValidateResult>;
|
|
120
120
|
CDK_TOOLKIT_E9600: make.IoMessageMaker<ValidateResult>;
|
|
121
121
|
CDK_TOOLKIT_I9601: make.IoMessageMaker<void>;
|
|
122
|
+
CDK_TOOLKIT_W9602: make.IoMessageMaker<void>;
|
|
122
123
|
CDK_TOOLKIT_I0100: make.IoMessageMaker<void>;
|
|
123
124
|
CDK_TOOLKIT_W0101: make.IoMessageMaker<void>;
|
|
124
125
|
CDK_TOOLKIT_E0101: make.IoMessageMaker<void>;
|