@sapui5/sap.fe.test 1.142.0 → 1.143.0
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/package.json +1 -1
- package/src/sap/fe/test/.library +1 -1
- package/src/sap/fe/test/BaseArrangements.js +15 -4
- package/src/sap/fe/test/JestTemplatingHelper.js +25 -7
- package/src/sap/fe/test/JestTemplatingHelper.tsx +26 -5
- package/src/sap/fe/test/internal/FEArrangements.js +0 -40
- package/src/sap/fe/test/library.js +1 -1
package/package.json
CHANGED
package/src/sap/fe/test/.library
CHANGED
|
@@ -115,19 +115,29 @@ sap.ui.define(
|
|
|
115
115
|
|
|
116
116
|
/**
|
|
117
117
|
* Resets the test data.
|
|
118
|
+
* @param {boolean} [bIgnoreRedeploy] Ignore the redeploy
|
|
118
119
|
* @returns {sap.ui.test.OpaBuilder} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
119
120
|
* @function
|
|
120
121
|
* @name sap.fe.test.BaseArrangements#iResetTestData
|
|
121
122
|
* @public
|
|
122
123
|
*/
|
|
123
|
-
iResetTestData: function () {
|
|
124
|
+
iResetTestData: function (bIgnoreRedeploy) {
|
|
124
125
|
var that = this,
|
|
126
|
+
oUriParams = new URLSearchParams(window.location.search),
|
|
127
|
+
sBackendUrl = oUriParams.get("useBackendUrl"),
|
|
128
|
+
sProxyPrefix = sBackendUrl ? "/databinding/proxy/" + sBackendUrl.replace("://", "/") : "",
|
|
125
129
|
bSuccess = false;
|
|
130
|
+
var sTenantID = window.location.href.includes("sap-client")
|
|
131
|
+
? new URL(window.location.href).searchParams.get("sap-client")
|
|
132
|
+
: "default";
|
|
126
133
|
|
|
127
134
|
return OpaBuilder.create(this)
|
|
128
135
|
.success(function () {
|
|
129
|
-
|
|
130
|
-
|
|
136
|
+
var oResetData = that.resetTestData(),
|
|
137
|
+
oRedeploy =
|
|
138
|
+
bIgnoreRedeploy ?? false ? Promise.resolve() : jQuery.post(sProxyPrefix + "/redeploy?tenant=" + sTenantID);
|
|
139
|
+
|
|
140
|
+
Promise.all([oResetData, oRedeploy])
|
|
131
141
|
.finally(function () {
|
|
132
142
|
bSuccess = true;
|
|
133
143
|
})
|
|
@@ -136,12 +146,13 @@ sap.ui.define(
|
|
|
136
146
|
});
|
|
137
147
|
|
|
138
148
|
return OpaBuilder.create(this)
|
|
149
|
+
.timeout(60) // allow some time (redeployment on the Java stack is slow)
|
|
139
150
|
.check(function () {
|
|
140
151
|
return bSuccess;
|
|
141
152
|
})
|
|
142
153
|
.execute();
|
|
143
154
|
})
|
|
144
|
-
.description(Utils.formatMessage("
|
|
155
|
+
.description(Utils.formatMessage("Reset test data on tenant '{0}'", sTenantID))
|
|
145
156
|
.execute();
|
|
146
157
|
},
|
|
147
158
|
|
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log", "sap/base/util/LoaderExtensions", "sap/base/util/uid", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/AppComponent", "sap/fe/core/PageController", "sap/fe/core/TemplateModel", "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor", "sap/fe/core/converters/ConverterContext", "sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/test/UI5MockHelper", "sap/m/Page", "sap/ui/base/BindingInfo", "sap/ui/base/BindingParser", "sap/ui/base/ManagedObjectMetadata", "sap/ui/core/Component", "sap/ui/core/InvisibleText", "sap/ui/core/XMLTemplateProcessor", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/util/serializer/Serializer", "sap/ui/fl/Utils", "sap/ui/fl/apply/_internal/flexState/FlexState", "sap/ui/fl/initial/_internal/Loader", "sap/ui/fl/initial/_internal/Storage", "sap/ui/fl/initial/_internal/preprocessors/XmlPreprocessor", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/ODataMetaModel", "sap/ui/model/odata/v4/ODataModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "xpath", "./JestFlexibilityHelper", "sap/fe/base/jsx-runtime/jsx"], function (compiler, fs, htmljs_parser, path, Log, LoaderExtensions, uid, jsx, AppComponent, PageController, TemplateModel, BuildingBlockTemplateProcessor, ConverterContext, ManifestWrapper, MetaModelConverter, ValueFormatter, SideEffectsFactory, UI5MockHelper, Page, BindingInfo, BindingParser, ManagedObjectMetadata, Component, InvisibleText, XMLTemplateProcessor, XMLPreprocessor, Serializer, Utils, FlexState, Loader, AppStorage, XmlPreprocessor, JSONModel, ODataMetaModel, ODataModel, _MetadataRequestor, xpath, JestFlexibilityHelper, _jsx) {
|
|
5
|
+
sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log", "sap/base/util/LoaderExtensions", "sap/base/util/uid", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/AppComponent", "sap/fe/core/PageController", "sap/fe/core/TemplateModel", "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor", "sap/fe/core/converters/ConverterContext", "sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/services/EnvironmentServiceFactory", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/test/UI5MockHelper", "sap/m/Page", "sap/ui/base/BindingInfo", "sap/ui/base/BindingParser", "sap/ui/base/ManagedObjectMetadata", "sap/ui/core/Component", "sap/ui/core/InvisibleText", "sap/ui/core/XMLTemplateProcessor", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/util/serializer/Serializer", "sap/ui/fl/Utils", "sap/ui/fl/apply/_internal/flexState/FlexState", "sap/ui/fl/initial/_internal/Loader", "sap/ui/fl/initial/_internal/Storage", "sap/ui/fl/initial/_internal/preprocessors/XmlPreprocessor", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/ODataMetaModel", "sap/ui/model/odata/v4/ODataModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "xpath", "./JestFlexibilityHelper", "sap/fe/base/jsx-runtime/jsx"], function (compiler, fs, htmljs_parser, path, Log, LoaderExtensions, uid, jsx, AppComponent, PageController, TemplateModel, BuildingBlockTemplateProcessor, ConverterContext, ManifestWrapper, MetaModelConverter, ValueFormatter, EnvironmentServiceFactory, SideEffectsFactory, UI5MockHelper, Page, BindingInfo, BindingParser, ManagedObjectMetadata, Component, InvisibleText, XMLTemplateProcessor, XMLPreprocessor, Serializer, Utils, FlexState, Loader, AppStorage, XmlPreprocessor, JSONModel, ODataMetaModel, ODataModel, _MetadataRequestor, xpath, JestFlexibilityHelper, _jsx) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var createFlexibilityChangesObject = JestFlexibilityHelper.createFlexibilityChangesObject;
|
|
10
10
|
var createMockResourceModel = UI5MockHelper.createMockResourceModel;
|
|
11
|
+
var EnvironmentCapabilitiesService = EnvironmentServiceFactory.EnvironmentCapabilitiesService;
|
|
12
|
+
var DefaultEnvironmentCapabilities = EnvironmentServiceFactory.DefaultEnvironmentCapabilities;
|
|
11
13
|
var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
|
|
12
14
|
var convertTypes = MetaModelConverter.convertTypes;
|
|
13
15
|
var parseXMLString = BuildingBlockTemplateProcessor.parseXMLString;
|
|
@@ -90,6 +92,9 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
90
92
|
}, mModels),
|
|
91
93
|
bindingContexts: {},
|
|
92
94
|
appComponent: {
|
|
95
|
+
getRoutingService: () => ({
|
|
96
|
+
_getTargetInformation: jest.fn()
|
|
97
|
+
}),
|
|
93
98
|
getSideEffectsService: jest.fn(),
|
|
94
99
|
getDiagnostics: () => undefined,
|
|
95
100
|
getShellServices: jest.fn(),
|
|
@@ -525,7 +530,7 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
525
530
|
|
|
526
531
|
//Assert that all changes have been applied
|
|
527
532
|
const changesApplied = getChangesFromXML(resultXML);
|
|
528
|
-
expect(changesApplied.length).toBe(flexChanges?.changes?.length ??
|
|
533
|
+
expect(changesApplied.length).toBe(flexChanges?.changes?.length ?? flexChanges?.variantDependentControlChanges?.length ?? 0);
|
|
529
534
|
return resultXML;
|
|
530
535
|
};
|
|
531
536
|
const getChangesFromXML = xml => [...xml.querySelectorAll("*")].flatMap(e => [...e.attributes].map(a => a.name)).filter(attr => attr.includes("sap.ui.fl.appliedChanges"));
|
|
@@ -661,8 +666,8 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
661
666
|
* @returns The string with dynamic IDs replaced.
|
|
662
667
|
*/
|
|
663
668
|
function removeDynamicId(id) {
|
|
664
|
-
const UID = /uid--id-\d{13}-\d{1,
|
|
665
|
-
const CONTROLID = /id-\d{13}-\d{1,
|
|
669
|
+
const UID = /uid--id-\d{13}-\d{1,4}/;
|
|
670
|
+
const CONTROLID = /id-\d{13}-\d{1,4}/;
|
|
666
671
|
return id.replace(UID, "uid--id").replace(CONTROLID, "id");
|
|
667
672
|
}
|
|
668
673
|
|
|
@@ -720,8 +725,10 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
720
725
|
* @param control.mBindingInfos The binding information of the control.
|
|
721
726
|
* @param tabCount The current tab level for indentation.
|
|
722
727
|
* @param options Optional settings for serialization.
|
|
728
|
+
* @param options.inheritedProperties If set to true, inherited properties are included in the serialization.
|
|
723
729
|
* @param options.keepDynamicIds If set to true, dynamic IDs are not replaced with a constant value.
|
|
724
730
|
* @param options.ignoreKeys List of property keys to ignore during serialization.
|
|
731
|
+
* @param options.ignoreBindingInfoKeys List of binding info keys to ignore during serialization.
|
|
725
732
|
* @returns A string representation of the control's properties.
|
|
726
733
|
*/
|
|
727
734
|
function serializeProperties(control, tabCount, options) {
|
|
@@ -731,12 +738,12 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
731
738
|
const properties = Object.keys(control.getMetadata().getAllProperties()).filter(propertyKey => !ignoreKeys.includes(propertyKey));
|
|
732
739
|
properties.sort();
|
|
733
740
|
for (const propertyKey of properties) {
|
|
734
|
-
if (!control.isPropertyInitial(propertyKey)) {
|
|
741
|
+
if (options?.inheritedProperties === true || !control.isPropertyInitial(propertyKey)) {
|
|
735
742
|
const propertyValue = getProperty(control, propertyKey, {
|
|
736
743
|
keepDynamicIds
|
|
737
744
|
});
|
|
738
745
|
data += `,\n${getTab(tabCount)} ${propertyKey}: ${propertyValue}`;
|
|
739
|
-
if (control.isBound(propertyKey)) {
|
|
746
|
+
if (control.isBound(propertyKey) && !(options?.ignoreBindingInfoKeys ?? []).includes(propertyKey)) {
|
|
740
747
|
data += `,\n${getTab(tabCount)} ${propertyKey}__BindingInfo: ${getBindingInfo(control, propertyKey, {
|
|
741
748
|
keepDynamicIds
|
|
742
749
|
})}`;
|
|
@@ -809,9 +816,11 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
809
816
|
* Serializes a UI5 control or an array of UI5 controls into a string representation.
|
|
810
817
|
* @param controlToSerialize The control or array of controls to serialize.
|
|
811
818
|
* @param options Optional settings for serialization.
|
|
819
|
+
* @param options.inheritedProperties If set to true, inherited properties will be included in the serialization.
|
|
812
820
|
* @param options.showCustomStyleClasses If set to true, custom style classes will be included in the serialization.
|
|
813
821
|
* @param options.keepDynamicIds If set to true, dynamic IDs are not replaced with a constant value.
|
|
814
822
|
* @param options.ignoreKeys List of property, association, and event keys to ignore during serialization.
|
|
823
|
+
* @param options.ignoreBindingInfoKeys List of binding info keys to ignore during serialization.
|
|
815
824
|
* @returns A string representation of the control or array of controls.
|
|
816
825
|
*/
|
|
817
826
|
function serializeControl(controlToSerialize, options) {
|
|
@@ -819,6 +828,14 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
819
828
|
const keepDynamicIds = options?.keepDynamicIds === true;
|
|
820
829
|
const serializeDelegate = {
|
|
821
830
|
start: function (control, sAggregationName) {
|
|
831
|
+
const customData = control.getCustomData?.();
|
|
832
|
+
if (Array.isArray(customData) && customData.length > 1) {
|
|
833
|
+
customData.sort((a, b) => a.getKey().localeCompare(b.getKey()));
|
|
834
|
+
control.removeAllCustomData();
|
|
835
|
+
for (const cd of customData) {
|
|
836
|
+
control.addCustomData(cd);
|
|
837
|
+
}
|
|
838
|
+
}
|
|
822
839
|
let controlDetail = "";
|
|
823
840
|
if (sAggregationName) {
|
|
824
841
|
if (control.getParent()) {
|
|
@@ -1163,6 +1180,7 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
1163
1180
|
}
|
|
1164
1181
|
});
|
|
1165
1182
|
});
|
|
1183
|
+
jest.spyOn(EnvironmentCapabilitiesService.prototype, "getCapabilities").mockReturnValue(DefaultEnvironmentCapabilities);
|
|
1166
1184
|
const mockAppComponent = await Component.create({
|
|
1167
1185
|
name: `sap.fe.test.${guid}`,
|
|
1168
1186
|
id: id
|
|
@@ -1224,4 +1242,4 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
1224
1242
|
_exports.delayFor = delayFor;
|
|
1225
1243
|
return _exports;
|
|
1226
1244
|
}, false);
|
|
1227
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2ciLCJzZXRMZXZlbCIsImplc3QiLCJzZXRUaW1lb3V0IiwibmFtZVNwYWNlTWFwIiwibWFjcm8iLCJtYWNyb1NoYXJlIiwibWFjcm9zIiwiZmVCQiIsIm1hY3JvRmllbGQiLCJtYWNyb2RhdGEiLCJsb2ciLCJjdXN0b21EYXRhIiwiY29udHJvbCIsImNvbnRyb2xzIiwiY29yZSIsImR0IiwibSIsImYiLCJmbCIsImludGVybmFsTWFjcm8iLCJtZGMiLCJhY3Rpb250b29sYmFyIiwibWRjRmllbGQiLCJtZGNUYWJsZSIsInUiLCJ1eGFwIiwibWFjcm9NaWNyb0NoYXJ0IiwibWljcm9DaGFydCIsIm1hY3JvVGFibGUiLCJtZGN2YyIsIm1kY3YiLCJ2YWx1ZUhlbHAiLCJjb250ZW50U3dpdGNoZXIiLCJmaWx0ZXJCYXIiLCJkcmFmdEluZGljYXRvciIsInZpc3VhbEZpbHRlciIsImZpZWxkaGVscCIsInJldmVzZU5hbWVzcGFjZU1hcCIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJyZXZlcnNlTWFwIiwiY3VycmVudE5hbWUiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlIiwiY29tcHV0ZUZpZWxkR3JvdXBJZHMiLCJfZ2V0VGVtcGxhdGVkU2VsZWN0b3IiLCJ4bWxkb20iLCJzZWxlY3RvciIsInJvb3RQYXRoIiwibm9kZU5hbWUiLCJzdGFydHNXaXRoIiwiX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MiLCJzTWV0YWRhdGFVcmwiLCJtQmluZGluZ0NvbnRleHRzIiwibU1vZGVscyIsImZha2VTaWRlRWZmZWN0U2VydmljZSIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnbiIsImNvbnZlcnRlckNvbnRleHQiLCJUZW1wbGF0ZU1vZGVsIiwiZm9yRWFjaCIsInNNb2RlbE5hbWUiLCJpc1RlbXBsYXRlTW9kZWwiLCJkYXRhIiwic2V0dGluZ3MiLCJtb2RlbHMiLCJtZXRhTW9kZWwiLCJiaW5kaW5nQ29udGV4dHMiLCJhcHBDb21wb25lbnQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJmbiIsImdldERpYWdub3N0aWNzIiwidW5kZWZpbmVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImdldE1hbmlmZXN0RW50cnkiLCJtb2NrUmV0dXJuVmFsdWUiLCJzS2V5IiwiZXhwZWN0IiwiZ2V0T2JqZWN0IiwidG9CZURlZmluZWQiLCJvTW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIl9sb2FkUmVzb3VyY2VWaWV3Iiwidmlld05hbWUiLCJuYW1lIiwicmVwbGFjZSIsInZpZXciLCJMb2FkZXJFeHRlbnNpb25zIiwibG9hZFJlc291cmNlIiwiZG9jdW1lbnRFbGVtZW50IiwicnVuWFBhdGhRdWVyeSIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwibGVuZ3RoIiwidG9Ob3RIYXZlQ29udHJvbCIsInRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMiLCJ4bWwiLCJ4bWxUZXh0IiwiYmFzZTY0RW50cmllcyIsIm1hdGNoIiwiZXJyb3JNZXNzYWdlcyIsIm1hcCIsImF0b2IiLCJzbGljZSIsImpvaW4iLCJfZXhwb3J0cyIsImZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwiLCJ4bWxTdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXRYTUwiLCJnZXRDb250cm9sQXR0cmlidXRlIiwiY29udHJvbFNlbGVjdG9yIiwiYXR0cmlidXRlTmFtZSIsInhtbERvbSIsIm9wdGlvbnMiLCJzZXJpYWxpemVyIiwid2luZG93IiwiWE1MU2VyaWFsaXplciIsIm5vZGUiLCJzZXJpYWxpemVUb1N0cmluZyIsIlNUQVJUIiwiRU5EIiwibGluZXMiLCJjdXJyZW50TGluZSIsImxldmVsIiwiYXR0cmlidXRlcyIsIm5ld2xpbmUiLCJwdXNoIiwicmVwZWF0IiwiYXBwZW5kQXR0cmlidXRlcyIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJpbmNsdWRlcyIsImF0dHJpYnV0ZSIsInZhbHVlIiwiYXBwZW5kIiwicGFyc2VyIiwicmVhZCIsImNyZWF0ZVBhcnNlciIsIm9uT3BlblRhZ1N0YXJ0Iiwib25PcGVuVGFnTmFtZSIsIm9uQXR0ck5hbWUiLCJ1bnNoaWZ0Iiwib25BdHRyVmFsdWUiLCJrZWVwRHluYW1pY0lkcyIsInJlbW92ZUR5bmFtaWNJZCIsIm9uT3BlblRhZ0VuZCIsInNlbGZDbG9zZWQiLCJvbkNsb3NlVGFnU3RhcnQiLCJvbkNsb3NlVGFnTmFtZSIsIm9uQ2xvc2VUYWdFbmQiLCJwYXJzZSIsInRyaW0iLCJjb21waWxlQ0RTIiwiY2RzVXJsIiwiYXJndW1lbnRzIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJlZG14Q29udGVudCIsImNkczJlZG14IiwiZGlyIiwicGF0aCIsInJlc29sdmUiLCJhbGxPcHRpb25zIiwiZW50cmllcyIsImVkbXhGaWxlTmFtZSIsImZpbGVuYW1lIiwiX3JlZiIsIm9wdGlvbktleSIsIm9wdGlvblZhbHVlIiwidG9TdHJpbmciLCJiYXNlbmFtZSIsImVkbXhGaWxlUGF0aCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJjZHMiLCJzZXJ2aWNlIiwic291cmNlcyIsInJlcXVpcmUiLCJjc24iLCJjb21waWxlciIsImNvbXBpbGVTb3VyY2VzIiwiZWRteE9wdGlvbnMiLCJvZGF0YUZvcmVpZ25LZXlzIiwib2RhdGFGb3JtYXQiLCJvZGF0YUNvbnRhaW5tZW50IiwiZWRteCIsInRvIiwiRXJyb3IiLCJnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlIiwiY2xhc3NOYW1lT0RhdGFNb2RlbCIsInNjb3BlT2JqZWN0IiwiZ2V0TW9kZWwiLCJpc0EiLCJnZXRTZXJ2aWNlVXJsIiwiZ2V0U2VydmljZSIsImdldENhcGFiaWxpdGllcyIsInNlcnZpY2VJbnN0YW5jZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwic2NvcGVUeXBlIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0RmFrZURpYWdub3N0aWNzIiwiaXNzdWVzIiwiYWRkSXNzdWUiLCJpc3N1ZUNhdGVnb3J5IiwiaXNzdWVTZXZlcml0eSIsImRldGFpbHMiLCJnZXRJc3N1ZXMiLCJjaGVja0lmSXNzdWVFeGlzdHMiLCJmaW5kIiwiaXNzdWUiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCIsIm1hbmlmZXN0U2V0dGluZ3MiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImRhdGFNb2RlbFBhdGgiLCJjb250ZXh0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImVudGl0eVNldCIsIkNvbnZlcnRlckNvbnRleHQiLCJNYW5pZmVzdFdyYXBwZXIiLCJtZXRhTW9kZWxDYWNoZSIsIm9SZXF1ZXN0b3IiLCJfTWV0YWRhdGFSZXF1ZXN0b3IiLCJjcmVhdGUiLCJPRGF0YU1ldGFNb2RlbCIsIl9yZXF1ZXN0QW5ub3RhdGlvbkNoYW5nZXMiLCJmZXRjaEVudGl0eUNvbnRhaW5lciIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsInByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImNvbnRleHRMb2NhdGlvbiIsImV2YWx1YXRlQmluZGluZyIsImJpbmRpbmdTdHJpbmciLCJiaW5kaW5nRWxlbWVudCIsIkJpbmRpbmdJbmZvIiwiX2xlbiIsImFyZ3MiLCJfa2V5IiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJldmFsdWF0ZUJpbmRpbmdXaXRoTW9kZWwiLCJtb2RlbENvbnRlbnQiLCJuYW1lZE1vZGVsc0NvbnRlbnQiLCJfZm9ybWF0dGVycyIsIlZhbHVlRm9ybWF0dGVyIiwidGV4dCIsIkludmlzaWJsZVRleHQiLCJiaW5kUHJvcGVydHkiLCJkZWZhdWx0TW9kZWwiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsInNldEJpbmRpbmdDb250ZXh0IiwiY29udGVudCIsIm1vZGVsIiwiZ2V0VGV4dCIsIlRFU1RWSUVXSUQiLCJhcHBseUZsZXhDaGFuZ2VzIiwiZmxleENoYW5nZXMiLCJyZXN1bHRYTUwiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaWQiLCJjaGFuZ2VzIiwiY3JlYXRlRmxleGliaWxpdHlDaGFuZ2VzT2JqZWN0IiwiYXBwSWQiLCJvTWFuaWZlc3QiLCJ0eXBlIiwiY3Jvc3NOYXZpZ2F0aW9uIiwib3V0Ym91bmRzIiwib0FwcENvbXBvbmVudCIsImdldENvbXBvbmVudERhdGEiLCJnZXRNYW5pZmVzdE9iamVjdCIsImdldEVudHJ5IiwiZ2V0TG9jYWxJZCIsInNJZCIsInNweU9uIiwiQXBwU3RvcmFnZSIsIlByb21pc2UiLCJMb2FkZXIiLCJDb21wb25lbnQiLCJVdGlscyIsIkZsZXhTdGF0ZSIsImluaXRpYWxpemUiLCJjb21wb25lbnRJZCIsIlhtbFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJjaGFuZ2VzQXBwbGllZCIsImdldENoYW5nZXNGcm9tWE1MIiwidG9CZSIsInZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyIsImZsYXRNYXAiLCJlIiwiZmlsdGVyIiwiYXR0ciIsImdldFRlbXBsYXRpbmdSZXN1bHQiLCJ4bWxJbnB1dCIsImNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsIiwidGVtcGxhdGVkWG1sIiwiRE9NUGFyc2VyIiwieG1sRG9jIiwicGFyc2VGcm9tU3RyaW5nIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiWE1MUHJlcHJvY2Vzc29yIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJnZXRUZW1wbGF0ZWRYTUwiLCJqc3giLCJkZWZpbmVYTUxOYW1lc3BhY2VNYXAiLCJ0ZW1wbGF0ZWRYTUwiLCJzZXJpYWxpZWRYTUwiLCJub3QiLCJwcm9jZXNzVmlldyIsIm9WaWV3RG9jdW1lbnQiLCJvUHJlcHJvY2Vzc2VkVmlldyIsImFzRWxlbWVudCIsImFzU3RyaW5nIiwib3V0ZXJIVE1MIiwicHJvY2Vzc0ZyYWdtZW50IiwidGVzdERhdGEiLCJpbnB1dFhtbCIsImlucHV0RG9jIiwianNvbk1vZGVsIiwic2V0RGF0YSIsInJlc3VsdERvYyIsImZyYWdtZW50cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZnJhZ21lbnQiLCJpbm5lckhUTUwiLCJ4bWxSZXN1bHQiLCJjaGlsZHJlbiIsImdldFRhYiIsInRhYkNvdW50IiwidG9BZGQiLCJ0YWIiLCJpIiwiVUlEIiwiQ09OVFJPTElEIiwiZ2V0UHJvcGVydHkiLCJwcm9wZXJ0eUtleSIsInByb3BlcnR5VmFsdWUiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0QmluZGluZ0luZm8iLCJiaW5kaW5nRGV0YWlsIiwib091dHB1dEZvcm1hdCIsImJpbmRpbmciLCJzZXJpYWxpemVQcm9wZXJ0aWVzIiwiaWdub3JlS2V5cyIsInByb3BlcnRpZXMiLCJnZXRNZXRhZGF0YSIsImdldEFsbFByb3BlcnRpZXMiLCJpc1Byb3BlcnR5SW5pdGlhbCIsImlzQm91bmQiLCJzZXJpYWxpemVBc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvbktleXMiLCJnZXRBbGxBc3NvY2lhdGlvbnMiLCJrZXkiLCJhc3NvY2lhdGlvbktleSIsImFzc29jaWF0aW9uVmFsdWUiLCJnZXRBc3NvY2lhdGlvbiIsImFzc29jaWF0aW9uVmFsdWVFbGVtZW50IiwiTWFuYWdlZE9iamVjdE1ldGFkYXRhIiwiaXNHZW5lcmF0ZWRJZCIsInNlcmlhbGl6ZUV2ZW50cyIsImludGVybmFsVUk1RXZlbnRzIiwiZXZlbnRJZHMiLCJnZXRBbGxFdmVudHMiLCJjb25jYXQiLCJldmVudEtleSIsImhhc0xpc3RlbmVycyIsInNlcmlhbGl6ZUNvbnRyb2wiLCJjb250cm9sVG9TZXJpYWxpemUiLCJzZXJpYWxpemVEZWxlZ2F0ZSIsInN0YXJ0Iiwic0FnZ3JlZ2F0aW9uTmFtZSIsImNvbnRyb2xEZXRhaWwiLCJnZXRQYXJlbnQiLCJpbmRleEluUGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJpbmRleE9mIiwiZ2V0TmFtZSIsImVuZCIsIm1pZGRsZSIsImdldElkIiwibUFnZ3JlZ2F0aW9ucyIsInRvb2x0aXAiLCJzaG93Q3VzdG9tU3R5bGVDbGFzc2VzIiwiYUN1c3RvbVN0eWxlQ2xhc3NlcyIsInN0YXJ0QWdncmVnYXRpb24iLCJzTmFtZSIsIm91dCIsIm1CaW5kaW5nSW5mb3MiLCJlbmRBZ2dyZWdhdGlvbiIsImNvbnRyb2xUb1JlbmRlciIsIlNlcmlhbGl6ZXIiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVDb250cm9sQXNYTUwiLCJwcmVmZXJWYWx1ZSIsImRlZmluZWROYW1lc3BhY2VzIiwiZ2V0TmFtZXNwYWNlQWxpYXMiLCJjbGFzc05hbWUiLCJuYW1lc1NwbGl0Iiwic3BsaXQiLCJuYW1lc3BhY2UiLCJuYW1lc3BhY2VBbGlhcyIsIm5hbWVGdWxsIiwiaGFzQWdncmVnYXRpb24iLCJtQWdncmVnYXRpb25zS2V5IiwibVByb3BlcnRpZXMiLCJwcm9wTmFtZSIsIm1FdmVudFJlZ2lzdHJ5IiwidW5pcXVlS2V5cyIsIlNldCIsImZyb20iLCJvQ29udHJvbEtleSIsInRlbXBsYXRlIiwiZkZ1bmN0aW9uIiwib3V0WE1MIiwiY3JlYXRlQXdhaXRlciIsImZuUmVzb2x2ZSIsIm15UHJvbWlzZSIsInByb21pc2UiLCJyZWdpc3Rlck1vY2tGcmFnbWVudHMiLCJfbGVuMiIsIl9rZXkyIiwib3JpZ2luYWxMb2FkVGVtcGxhdGUiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZVByb21pc2UiLCJsb2FkVGVtcGxhdGVTdHViIiwibW9ja0ltcGxlbWVudGF0aW9uIiwidGVtcGxhdGVOYW1lIiwiZXh0ZW5zaW9uIiwicGFyc2VYTUxTdHJpbmciLCJpbml0aWFsaXplQXBwQ29tcG9uZW50Iiwidmlld0xldmVsIiwiT0RhdGFNb2RlbCIsInByb3RvdHlwZSIsImNkc0ZpbGUiLCJfX2Rpcm5hbWUiLCJndWlkIiwidWlkIiwiY2RzQ29udGVudCIsImplc3RVSTUiLCJtb2NrVXJsIiwicGFnZUNvbnRlbnQiLCJQYWdlQ29udHJvbGxlciIsIkRlZmF1bHRQYWdlQ29udGVudCIsIl9QYWdlQ29udHJvbGxlciIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicmVuZGVyIiwiX2pzeCIsIlBhZ2UiLCJzYXAiLCJ1aSIsImRlZmluZSIsIl9BcHBDb21wb25lbnQiLCJBcHBDb21wb25lbnQiLCJtZXRhZGF0YSIsIm1hbmlmZXN0IiwidGl0bGUiLCJkYXRhU291cmNlcyIsIm1haW5TZXJ2aWNlIiwidXJpIiwib2RhdGFWZXJzaW9uIiwiZGF0YVNvdXJjZSIsInJvdXRpbmciLCJ0YXJnZXRzIiwiRGVmYXVsdCIsIm1haW5Db250ZXh0UGF0aCIsInZpZXdUeXBlIiwidmlld0NvbnRlbnQiLCJyb3V0ZXMiLCJwYXR0ZXJuIiwidGFyZ2V0IiwiZmVNYW5pZmVzdFNldHRpbmdzIiwibW9ja0FwcENvbXBvbmVudCIsImluaXRpYWxpemVkIiwidiIsImdldFJvdXRlciIsImdldFRhcmdldCIsImxvYWQiLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIm9iamVjdCIsImZpbmRFbGVtZW50IiwiY29sbGVjdGlvbiIsImVsZW1lbnQiLCJpdGVtIiwid2FpdEZvckV2ZW50IiwiZXZlbnROYW1lIiwiYXR0YWNoRXZlbnRPbmNlIiwiZXZlbnQiLCJrZWVwQmluZGluZ1N0cmluZ0ZvclRlc3QiLCJlbmFibGVkIiwiQmluZGluZ1BhcnNlciIsIl9rZWVwQmluZGluZ1N0cmluZ3MiLCJkZWxheUZvciIsImRlbGF5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJKZXN0VGVtcGxhdGluZ0hlbHBlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbnlBbm5vdGF0aW9uLCBDb252ZXJ0ZWRNZXRhZGF0YSwgRW50aXR5U2V0LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IGNvbXBpbGVyIGZyb20gXCJAc2FwL2Nkcy1jb21waWxlclwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgdHlwZSB7IFJhbmdlLCBSYW5nZXMgfSBmcm9tIFwiaHRtbGpzLXBhcnNlclwiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2VyIH0gZnJvbSBcImh0bWxqcy1wYXJzZXJcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IExvYWRlckV4dGVuc2lvbnMgZnJvbSBcInNhcC9iYXNlL3V0aWwvTG9hZGVyRXh0ZW5zaW9uc1wiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBUZW1wbGF0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZU1vZGVsXCI7XG5pbXBvcnQgeyBwYXJzZVhNTFN0cmluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncywgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSURpYWdub3N0aWNzLCBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCBWYWx1ZUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzRmFjdG9yeSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL3Rlc3QvVUk1TW9ja0hlbHBlclwiO1xuaW1wb3J0IFBhZ2UgZnJvbSBcInNhcC9tL1BhZ2VcIjtcbmltcG9ydCBCaW5kaW5nSW5mbyBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ0luZm9cIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8sIFByb3BlcnR5QmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdE1ldGFkYXRhXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0Q29udGVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL3NlcmlhbGl6ZXIvU2VyaWFsaXplclwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCJzYXAvdWkvZmwvVXRpbHNcIjtcbmltcG9ydCBGbGV4U3RhdGUgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvZmxleFN0YXRlL0ZsZXhTdGF0ZVwiO1xuaW1wb3J0IExvYWRlciBmcm9tIFwic2FwL3VpL2ZsL2luaXRpYWwvX2ludGVybmFsL0xvYWRlclwiO1xuaW1wb3J0IEFwcFN0b3JhZ2UgZnJvbSBcInNhcC91aS9mbC9pbml0aWFsL19pbnRlcm5hbC9TdG9yYWdlXCI7XG5pbXBvcnQgWG1sUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvZmwvaW5pdGlhbC9faW50ZXJuYWwvcHJlcHJvY2Vzc29ycy9YbWxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IF9NZXRhZGF0YVJlcXVlc3RvciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L2xpYi9fTWV0YWRhdGFSZXF1ZXN0b3JcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdCB9IGZyb20gXCIuL0plc3RGbGV4aWJpbGl0eUhlbHBlclwiO1xuXG50eXBlIFByZVByb2Nlc3NvclNldHRpbmdzVHlwZSA9IHtcblx0bW9kZWxzOiB7XG5cdFx0W25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB8IE9EYXRhTWV0YU1vZGVsO1xuXHR9O1xuXHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRbbmFtZTogc3RyaW5nXTogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0fTtcbn07XG50eXBlIE1vY2tGcmFnbWVudCA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRjb250ZW50OiBzdHJpbmc7XG59O1xuXG50eXBlIEplc3RUZW1wbGF0ZWRWaWV3ID0ge1xuXHRhc0VsZW1lbnQ6IEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdGFzU3RyaW5nOiBzdHJpbmc7XG59O1xuXG5Mb2cuc2V0TGV2ZWwoMSBhcyBhbnksIFwic2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3JcIik7XG5qZXN0LnNldFRpbWVvdXQoNDAwMDApO1xuXG5jb25zdCBuYW1lU3BhY2VNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG5cdG1hY3JvOiBcInNhcC5mZS5tYWNyb3NcIixcblx0bWFjcm9TaGFyZTogXCJzYXAuZmUubWFjcm9zLnNoYXJlXCIsXG5cdG1hY3JvczogXCJzYXAuZmUubWFjcm9zXCIsXG5cdGZlQkI6IFwic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZ1wiLFxuXHRtYWNyb0ZpZWxkOiBcInNhcC5mZS5tYWNyb3MuZmllbGRcIixcblx0bWFjcm9kYXRhOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0bG9nOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0Y3VzdG9tRGF0YTogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGNvbnRyb2w6IFwic2FwLmZlLmNvcmUuY29udHJvbHNcIixcblx0Y29udHJvbHM6IFwic2FwLmZlLm1hY3Jvcy5jb250cm9sc1wiLFxuXHRjb3JlOiBcInNhcC51aS5jb3JlXCIsXG5cdGR0OiBcInNhcC51aS5kdFwiLFxuXHRtOiBcInNhcC5tXCIsXG5cdGY6IFwic2FwLnVpLmxheW91dC5mb3JtXCIsXG5cdGZsOiBcInNhcC51aS5mbFwiLFxuXHRpbnRlcm5hbE1hY3JvOiBcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWxcIixcblx0bWRjOiBcInNhcC51aS5tZGNcIixcblx0YWN0aW9udG9vbGJhcjogXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXJcIixcblx0bWRjRmllbGQ6IFwic2FwLnVpLm1kYy5maWVsZFwiLFxuXHRtZGNUYWJsZTogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdHU6IFwic2FwLnVpLnVuaWZpZWRcIixcblx0dXhhcDogXCJzYXAudXhhcFwiLFxuXHRtYWNyb01pY3JvQ2hhcnQ6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdG1pY3JvQ2hhcnQ6IFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIixcblx0bWFjcm9UYWJsZTogXCJzYXAuZmUubWFjcm9zLnRhYmxlXCIsXG5cdG1kY3ZjOiBcInNhcC51aS5tZGMudmFsdWVoZWxwLmNvbnRlbnRcIixcblx0bWRjdjogXCJzYXAudWkubWRjLnZhbHVlaGVscFwiLFxuXHR2YWx1ZUhlbHA6IFwic2FwLmZlLm1hY3Jvcy52YWx1ZUhlbHBcIixcblx0Y29udGVudFN3aXRjaGVyOiBcInNhcC5mZS5tYWNyb3MuY29udGVudFN3aXRjaGVyXCIsXG5cdGZpbHRlckJhcjogXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhclwiLFxuXHRkcmFmdEluZGljYXRvcjogXCJzYXAuZmUubWFjcm9zLmRyYWZ0SW5kaWNhdG9yXCIsXG5cdHZpc3VhbEZpbHRlcjogXCJzYXAuZmUubWFjcm9zLnZpc3VhbGZpbHRlcnNcIixcblx0ZmllbGRoZWxwOiBcInNhcC51aS5jb3JlLmZpZWxkaGVscFwiXG59O1xuY29uc3QgcmV2ZXNlTmFtZXNwYWNlTWFwID0gT2JqZWN0LmtleXMobmFtZVNwYWNlTWFwKS5yZWR1Y2UoKHJldmVyc2VNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGN1cnJlbnROYW1lKSA9PiB7XG5cdHJldmVyc2VNYXBbbmFtZVNwYWNlTWFwW2N1cnJlbnROYW1lXV0gPSBjdXJyZW50TmFtZTtcblx0cmV0dXJuIHJldmVyc2VNYXA7XG59LCB7fSk7XG5jb25zdCBzZWxlY3QgPSB4cGF0aC51c2VOYW1lc3BhY2VzKG5hbWVTcGFjZU1hcCk7XG5cbmNvbnN0IGRlZmF1bHRGYWtlU2lkZUVmZmVjdFNlcnZpY2UgPSB7IGNvbXB1dGVGaWVsZEdyb3VwSWRzOiAoKSA9PiBbXSB9O1xuXG5mdW5jdGlvbiBfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sZG9tOiBOb2RlLCBzZWxlY3Rvcjogc3RyaW5nKTogc3RyaW5nIHtcblx0LyoqXG5cdCAqIGlmIGEgcm9vdCBlbGVtZW50IGhhcyBiZWVuIGFkZGVkIGR1cmluZyB0aGUgdGVtcGxhdGluZyBieSBvdXIgSmVzdCBUZW1wbGF0aW5nIG1ldGhvZHNcblx0ICogdGhlIHJvb3QgZWxlbWVudCBpcyBhZGRlZCB0byB0aGUgc2VsZWN0b3IgcGF0aC5cblx0ICovXG5cdGNvbnN0IHJvb3RQYXRoID0gXCIvcm9vdFwiO1xuXHRyZXR1cm4gYCR7eG1sZG9tLm5vZGVOYW1lID09PSBcInJvb3RcIiAmJiAhc2VsZWN0b3Iuc3RhcnRzV2l0aChyb290UGF0aCkgPyByb290UGF0aCA6IFwiXCJ9JHtzZWxlY3Rvcn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfYnVpbGRQcmVQcm9jZXNzb3JTZXR0aW5ncyhcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlPzogdW5rbm93blxuKTogUHJvbWlzZTxQcmVQcm9jZXNzb3JTZXR0aW5nc1R5cGU+IHtcblx0bGV0IG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsIHwgdW5kZWZpbmVkO1xuXHRpZiAoc01ldGFkYXRhVXJsKSB7XG5cdFx0b01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRcdC8vIFRvIGVuc3VyZSBvdXIgbWFjcm8gY2FuIHVzZSAjc2V0QmluZGluZ0NvbnRleHQgd2UgZW5zdXJlIHRoZXJlIGlzIGEgcHJlIGV4aXN0aW5nIEpTT05Nb2RlbCBmb3IgY29udmVydGVyQ29udGV4dFxuXHRcdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXHRcdGlmICghbU1vZGVscy5oYXNPd25Qcm9wZXJ0eShcImNvbnZlcnRlckNvbnRleHRcIikpIHtcblx0XHRcdG1Nb2RlbHMgPSBPYmplY3QuYXNzaWduKG1Nb2RlbHMsIHsgY29udmVydGVyQ29udGV4dDogbmV3IFRlbXBsYXRlTW9kZWwoe30sIG9NZXRhTW9kZWwhKSB9KTtcblx0XHR9XG5cblx0XHRPYmplY3Qua2V5cyhtTW9kZWxzKS5mb3JFYWNoKGZ1bmN0aW9uIChzTW9kZWxOYW1lKSB7XG5cdFx0XHRpZiAobU1vZGVsc1tzTW9kZWxOYW1lXSAmJiBtTW9kZWxzW3NNb2RlbE5hbWVdLmlzVGVtcGxhdGVNb2RlbCkge1xuXHRcdFx0XHRtTW9kZWxzW3NNb2RlbE5hbWVdID0gbmV3IFRlbXBsYXRlTW9kZWwobU1vZGVsc1tzTW9kZWxOYW1lXS5kYXRhLCBvTWV0YU1vZGVsISk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRjb25zdCBzZXR0aW5nczogYW55ID0ge1xuXHRcdG1vZGVsczogT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsXG5cdFx0XHR9LFxuXHRcdFx0bU1vZGVsc1xuXHRcdCksXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fSxcblx0XHRhcHBDb21wb25lbnQ6IHtcblx0XHRcdGdldFNpZGVFZmZlY3RzU2VydmljZTogamVzdC5mbigpLFxuXHRcdFx0Z2V0RGlhZ25vc3RpY3M6ICgpID0+IHVuZGVmaW5lZCxcblx0XHRcdGdldFNoZWxsU2VydmljZXM6IGplc3QuZm4oKSxcblx0XHRcdGdldE1hbmlmZXN0RW50cnk6ICgpID0+IHVuZGVmaW5lZFxuXHRcdH1cblx0fTtcblxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShmYWtlU2lkZUVmZmVjdFNlcnZpY2UgPz8gZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHQvKiBBc3NlcnQgdG8gbWFrZSBzdXJlIHRoZSBhbm5vdGF0aW9ucyBhcmUgaW4gdGhlIHRlc3QgbWV0YWRhdGEgLT4gYXZvaWQgbWlzbGVhZGluZyB0ZXN0cyAqL1xuXHRcdGV4cGVjdCh0eXBlb2Ygb01ldGFNb2RlbD8uZ2V0T2JqZWN0KG1CaW5kaW5nQ29udGV4dHNbc0tleV0pKS50b0JlRGVmaW5lZCgpO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG1Nb2RlbHNbc0tleV0gfHwgb01ldGFNb2RlbDtcblx0XHRzZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0tleV0gPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobUJpbmRpbmdDb250ZXh0c1tzS2V5XSk7IC8vVmFsdWUgaXMgc1BhdGhcblx0XHRzZXR0aW5ncy5tb2RlbHNbc0tleV0gPSBvTW9kZWw7XG5cdH0pO1xuXHRyZXR1cm4gc2V0dGluZ3M7XG59XG5cbmZ1bmN0aW9uIF9sb2FkUmVzb3VyY2VWaWV3KHZpZXdOYW1lOiBzdHJpbmcpOiBFbGVtZW50IHtcblx0Y29uc3QgbmFtZSA9IHZpZXdOYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi9cIikgKyBcIi52aWV3LnhtbFwiO1xuXHRjb25zdCB2aWV3ID0gTG9hZGVyRXh0ZW5zaW9ucy5sb2FkUmVzb3VyY2UobmFtZSk7XG5cdHJldHVybiB2aWV3LmRvY3VtZW50RWxlbWVudDtcbn1cblxuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb20sIHNlbGVjdG9yKSwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sZG9tLCBzZWxlY3RvciksIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fSxcblx0LyoqXG5cdCAqIENoZWNrcyBmb3IgZXJyb3JzIGluIGB4bWxgIGNyZWF0ZWQgZHVyaW5nIHRlbXBsYXRpbmcgb2YgYW4gWE1MIHN0cmluZyBvclxuXHQgKiBhbiBYTUwgbm9kZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBjaGVja2VzIGZvciB0aGUgeG1sIGVycm9ycyBjcmVhdGVkIGJ5IHRoZVxuXHQgKiBmdW5jdGlvbiBbQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yLmNyZWF0ZUVycm9yWE1MXXtAbGluayBzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy50ZW1wbGF0aW5nLkJ1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvciNjcmVhdGVFcnJvclhNTH0uXG5cdCAqIEBwYXJhbSB4bWwgWE1MIFN0cmluZyBvciBYTUwgTm9kZSB0byBiZSB0ZXN0ZWQgZm9yIGVycm9yc1xuXHQgKiBAcmV0dXJucyBKZXN0IE1hdGNoZXIgcmVzdWx0IG9iamVjdFxuXHQgKi9cblx0dG9IYXZlVGVtcGxhdGluZ0Vycm9ycyh4bWw6IHN0cmluZyB8IE5vZGUpIHtcblx0XHRjb25zdCB4bWxUZXh0ID0gdHlwZW9mIHhtbCA9PT0gXCJzdHJpbmdcIiA/IHhtbCA6IHNlcmlhbGl6ZVhNTCh4bWwpO1xuXHRcdGNvbnN0IGJhc2U2NEVudHJpZXM6IHN0cmluZ1tdID0geG1sVGV4dC5tYXRjaCgvQkJGXFwuYmFzZTY0RGVjb2RlXFwoJyhbXiddKiknXFwpL2dtKSB8fCAoW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gYmFzZTY0RW50cmllcy5tYXAoKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBhdG9iKG1lc3NhZ2UubWF0Y2goLygnW14nXSopLyk/LlswXT8uc2xpY2UoMSkgfHwgXCJcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9KTtcblx0XHRpZiAoZXJyb3JNZXNzYWdlcy5sZW5ndGggPD0gMCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bWVzc2FnZTogKCkgPT4gYFhNTCBUZW1wbGF0aW5nIHdpdGhvdXQgZXJyb3JzYCxcblx0XHRcdFx0cGFzczogZmFsc2Vcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1lc3NhZ2U6ICgpID0+IGVycm9yTWVzc2FnZXMuam9pbihcIlxcblwiKSxcblx0XHRcdFx0cGFzczogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cbn0pO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdHJldHVybiBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoJHtfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sRG9tLCBjb250cm9sU2VsZWN0b3IpfS9AJHthdHRyaWJ1dGVOYW1lfSlgO1xuXHRyZXR1cm4gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKTtcbn07XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBwYXJ0cyBvciB0aGUgY29tcGxldGUgZ2l2ZW4gWE1MIERPTSB0byBzdHJpbmcuXG4gKiBAcGFyYW0geG1sRG9tIERPTSBub2RlIHRoYXQgaXMgdG8gYmUgc2VyaWFsaXplZC5cbiAqIEBwYXJhbSBzZWxlY3RvciBPcHRpb25hbCBzZWxlY3RvciBvZiBzdWIgbm9kZXNcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIHNlcmlhbGl6YXRpb24gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMua2VlcER5bmFtaWNJZHMgSWYgc2V0IHRvIHRydWUsIGR5bmFtaWMgSURzIGFyZSBub3QgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlXG4gKiBAcmV0dXJucyBYTUwgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVYTUwgPSBmdW5jdGlvbiAoeG1sRG9tOiBOb2RlLCBzZWxlY3Rvcj86IHN0cmluZywgb3B0aW9ucz86IHsga2VlcER5bmFtaWNJZHM/OiBib29sZWFuIH0pOiBzdHJpbmcge1xuXHRjb25zdCBzZXJpYWxpemVyID0gbmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKCk7XG5cdGxldCB4bWxTdHJpbmc6IHN0cmluZztcblx0aWYgKHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KHNlbGVjdG9yLCB4bWxEb20pIGFzIE5vZGVbXTtcblx0XHR4bWxTdHJpbmcgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcobm9kZSkpLmpvaW4oXCJcXG5cIik7XG5cdH0gZWxzZSB7XG5cdFx0eG1sU3RyaW5nID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyh4bWxEb20pO1xuXHR9XG5cdHJldHVybiBmb3JtYXRYTUwoeG1sU3RyaW5nLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogRm9ybWF0cyBhIHN0cmluZyBjb250YWluaW5nIGFuIFhNTCBkb2N1bWVudC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgY29uc2lkZXJzIFhNTCB0YWdzIGFuZCBhdHRyaWJ1dGVzLCBpZ25vcmluZyBldmVyeXRoaW5nIGVsc2UgKHRleHQsIGNvbW1lbnRzKS4gQWRkaXRpb25hbGx5LFxuICogYXR0cmlidXRlIHZhbHVlcyBjb250YWluaW5nIGEgdmFyeWluZyBVSUQgYXJlIHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZS5cbiAqXG4gKiBBbiBcIlhNTFwiIHN0cmluZyBjb250YWluaW5nIG11bHRpcGxlIHJvb3QgZWxlbWVudHMgY2FuIGJlLlxuICogQHBhcmFtIHhtbFN0cmluZyAgVGhlIGlucHV0IFhNTCBzdHJpbmcuIFRoaXMgZnVuY3Rpb24gYWxzbyBhY2NlcHRzIFwiWE1MXCIgc3RyaW5ncyB3aXRoIG11bHRpcGxlIHJvb3QgZWxlbWVudHMuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zLmtlZXBEeW5hbWljSWRzIElmIHNldCB0byB0cnVlLCBkeW5hbWljIElEcyBhcmUgbm90IHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZVxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBYTUwgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0WE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nLCBvcHRpb25zPzogeyBrZWVwRHluYW1pY0lkcz86IGJvb2xlYW4gfSk6IHN0cmluZyB7XG5cdGNvbnN0IFNUQVJUID0gXCI8X19YTUxfXz5cIixcblx0XHRFTkQgPSBcIjwvX19YTUxfXz5cIixcblx0XHRsaW5lczogc3RyaW5nW10gPSBbXTtcblxuXHRsZXQgY3VycmVudExpbmUgPSBcIlwiLFxuXHRcdGxldmVsID0gLTEsXG5cdFx0YXR0cmlidXRlczogeyBuYW1lOiBzdHJpbmc7IHZhbHVlPzogc3RyaW5nIH1bXSA9IFtdO1xuXG5cdGZ1bmN0aW9uIG5ld2xpbmUoKSB7XG5cdFx0aWYgKGN1cnJlbnRMaW5lICYmIGN1cnJlbnRMaW5lICE9PSBTVEFSVCkge1xuXHRcdFx0bGluZXMucHVzaChjdXJyZW50TGluZSk7XG5cdFx0fVxuXG5cdFx0Y3VycmVudExpbmUgPSBsZXZlbCA+IDAgPyBcIiAgXCIucmVwZWF0KGxldmVsKSA6IFwiXCI7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRBdHRyaWJ1dGVzKCkge1xuXHRcdGlmIChhdHRyaWJ1dGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLnNvcnQoKGEsIGIpID0+IHtcblx0XHRcdFx0aWYgKGEubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikgJiYgIWIubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWEubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikgJiYgYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGEubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikgJiYgYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGEubmFtZS5pbmNsdWRlcyhcIjpcIikgJiYgIWIubmFtZS5pbmNsdWRlcyhcIjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWEubmFtZS5pbmNsdWRlcyhcIjpcIikgJiYgYi5uYW1lLmluY2x1ZGVzKFwiOlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0bGV2ZWwrKztcblx0XHRcdGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0bmV3bGluZSgpO1xuXHRcdFx0XHRjdXJyZW50TGluZSArPSBhdHRyaWJ1dGUubmFtZTtcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZS52YWx1ZSkgY3VycmVudExpbmUgKz0gYXR0cmlidXRlLnZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0bGV2ZWwtLTtcblx0XHRcdGF0dHJpYnV0ZXMgPSBbXTtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmQoZGF0YTogUmFuZ2UpIHtcblx0XHRjdXJyZW50TGluZSArPSBwYXJzZXIucmVhZChkYXRhKTtcblx0fVxuXG5cdGNvbnN0IHBhcnNlciA9IGNyZWF0ZVBhcnNlcih7XG5cdFx0b25PcGVuVGFnU3RhcnQoZGF0YTogUmFuZ2UpIHtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHR9LFxuXG5cdFx0b25PcGVuVGFnTmFtZTogYXBwZW5kLFxuXG5cdFx0b25BdHRyTmFtZShkYXRhOiBSYW5nZSkge1xuXHRcdFx0YXR0cmlidXRlcy51bnNoaWZ0KHsgbmFtZTogcGFyc2VyLnJlYWQoZGF0YSkgfSk7XG5cdFx0fSxcblxuXHRcdG9uQXR0clZhbHVlKGRhdGE6IFJhbmdlcy5BdHRyVmFsdWUpIHtcblx0XHRcdGF0dHJpYnV0ZXNbMF0udmFsdWUgPSBwYXJzZXIucmVhZChkYXRhKTtcblx0XHRcdGF0dHJpYnV0ZXNbMF0udmFsdWUgPSBwYXJzZXIucmVhZChkYXRhKTtcblx0XHRcdGlmIChvcHRpb25zPy5rZWVwRHluYW1pY0lkcyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRhdHRyaWJ1dGVzWzBdLnZhbHVlID0gcmVtb3ZlRHluYW1pY0lkKGF0dHJpYnV0ZXNbMF0udmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRvbk9wZW5UYWdFbmQoZGF0YTogUmFuZ2VzLk9wZW5UYWdFbmQpIHtcblx0XHRcdGFwcGVuZEF0dHJpYnV0ZXMoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHRcdGlmICghZGF0YS5zZWxmQ2xvc2VkKSBsZXZlbCsrO1xuXHRcdH0sXG5cblx0XHRvbkNsb3NlVGFnU3RhcnQoZGF0YTogUmFuZ2UpIHtcblx0XHRcdGxldmVsLS07XG5cdFx0XHRuZXdsaW5lKCk7XG5cdFx0XHRhcHBlbmQoZGF0YSk7XG5cdFx0fSxcblxuXHRcdG9uQ2xvc2VUYWdOYW1lOiBhcHBlbmQsXG5cdFx0b25DbG9zZVRhZ0VuZDogYXBwZW5kXG5cdH0pO1xuXG5cdHBhcnNlci5wYXJzZShTVEFSVCArIHhtbFN0cmluZyArIEVORCk7XG5cdHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpLnRyaW0oKTtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBhIENEUyBmaWxlIGludG8gYW4gRURNWCBmaWxlLlxuICogQHBhcmFtIGNkc1VybCBUaGUgcGF0aCB0byB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBDRFMgZGVmaW5pdGlvbi4gVGhpcyBmaWxlIG11c3QgZGVjbGFyZSB0aGUgbmFtZXNwYWNlXG4gKiBzYXAuZmUudGVzdCBhbmQgYSBzZXJ2aWNlIEplc3RTZXJ2aWNlXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgRURNWCBvdXRwdXRcbiAqIEByZXR1cm5zIFRoZSBwYXRoIG9mIHRoZSBnZW5lcmF0ZWQgRURNWFxuICovXG5leHBvcnQgY29uc3QgY29tcGlsZUNEUyA9IGZ1bmN0aW9uIChjZHNVcmw6IHN0cmluZywgb3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge30pIHtcblx0Y29uc3QgY2RzU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNkc1VybCwgXCJ1dGYtOFwiKTtcblx0Y29uc3QgZWRteENvbnRlbnQgPSBjZHMyZWRteChjZHNTdHJpbmcsIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9ucyk7XG5cdGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShjZHNVcmwsIFwiLi5cIiwgXCJnZW5cIik7XG5cblx0Ly8gSWYgdGhlIGNhbGxlciBwcm92aWRlZCBDRFMgY29tcGlsZXIgb3B0aW9uczogSW5jbHVkZSB0aGVtIGluIHRoZSBmaWxlbmFtZS4gVGhpcyBwcmV2ZW50cyB1bnByZWRpY3RhYmxlIHJlc3VsdHMgaWYgdGhlIHNhbWUgQ0RTIHNvdXJjZVxuXHQvLyBmaWxlIGlzIHVzZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCBhIGRpZmZlcmVudCBzZXQgb2Ygb3B0aW9ucyAoZS5nLiBpbiBhIHRlc3QgcnVubmluZyBpbiBwYXJhbGxlbClcblx0Y29uc3QgYWxsT3B0aW9ucyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpO1xuXHRhbGxPcHRpb25zLnNvcnQoKGEsIGIpID0+IGJbMF0ubG9jYWxlQ29tcGFyZShhWzBdKSk7XG5cblx0Y29uc3QgZWRteEZpbGVOYW1lID1cblx0XHRhbGxPcHRpb25zLnJlZHVjZShcblx0XHRcdChmaWxlbmFtZSwgW29wdGlvbktleSwgb3B0aW9uVmFsdWVdKSA9PiBgJHtmaWxlbmFtZX0jJHtvcHRpb25LZXl9PSR7b3B0aW9uVmFsdWUudG9TdHJpbmcoKX0jYCxcblx0XHRcdHBhdGguYmFzZW5hbWUoY2RzVXJsKS5yZXBsYWNlKFwiLmNkc1wiLCBcIlwiKVxuXHRcdCkgKyBcIi54bWxcIjtcblxuXHRjb25zdCBlZG14RmlsZVBhdGggPSBwYXRoLnJlc29sdmUoZGlyLCBlZG14RmlsZU5hbWUpO1xuXG5cdGZzLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdGZzLndyaXRlRmlsZVN5bmMoZWRteEZpbGVQYXRoLCBlZG14Q29udGVudCk7XG5cdHJldHVybiBlZG14RmlsZVBhdGg7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgQ0RTIHRvIEVETVguXG4gKiBAcGFyYW0gY2RzIFRoZSBDRFMgbW9kZWwuIEl0IG11c3QgZGVmaW5lIGF0IGxlYXN0IG9uZSBzZXJ2aWNlLlxuICogQHBhcmFtIHNlcnZpY2UgVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIGJlIGNvbXBpbGVkLiBEZWZhdWx0cyB0byBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgRURNWCBvdXRwdXRcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzZXJ2aWNlIG1vZGVsIGFzIEVETVguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjZHMyZWRteChjZHM6IHN0cmluZywgc2VydmljZSA9IFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge30pIHtcblx0Y29uc3Qgc291cmNlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgXCJzb3VyY2UuY2RzXCI6IGNkcyB9O1xuXG5cdC8vIGFsbG93IHRvIGluY2x1ZGUgc3R1ZmYgZnJvbSBAc2FwL2Nkcy9jb21tb25cblx0aWYgKGNkcy5pbmNsdWRlcyhcIidAc2FwL2Nkcy9jb21tb24nXCIpKSB7XG5cdFx0c291cmNlc1tcImNvbW1vbi5jZHNcIl0gPSBmcy5yZWFkRmlsZVN5bmMocmVxdWlyZS5yZXNvbHZlKFwiQHNhcC9jZHMvY29tbW9uLmNkc1wiKSwgXCJ1dGYtOFwiKTtcblx0fVxuXG5cdGNvbnN0IGNzbiA9IGNvbXBpbGVyLmNvbXBpbGVTb3VyY2VzKHNvdXJjZXMsIHt9KTtcblxuXHRjb25zdCBlZG14T3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge1xuXHRcdG9kYXRhRm9yZWlnbktleXM6IHRydWUsXG5cdFx0b2RhdGFGb3JtYXQ6IFwic3RydWN0dXJlZFwiLFxuXHRcdG9kYXRhQ29udGFpbm1lbnQ6IHRydWUsXG5cdFx0Li4ub3B0aW9ucyxcblx0XHRzZXJ2aWNlOiBzZXJ2aWNlXG5cdH07XG5cblx0Y29uc3QgZWRteCA9IGNvbXBpbGVyLnRvLmVkbXgoY3NuLCBlZG14T3B0aW9ucyk7XG5cdGlmICghZWRteCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29tcGlsYXRpb24gZmFpbGVkLiBIaW50OiBNYWtlIHN1cmUgdGhhdCB0aGUgQ0RTIG1vZGVsIGRlZmluZXMgc2VydmljZSAke3NlcnZpY2V9LmApO1xuXHR9XG5cdHJldHVybiBlZG14O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSA9IGFzeW5jIGZ1bmN0aW9uIChcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0Y2xhc3NOYW1lT0RhdGFNb2RlbCA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIlxuKTogUHJvbWlzZTxTaWRlRWZmZWN0c1NlcnZpY2U+IHtcblx0Y29uc3Qgc2NvcGVPYmplY3QgPSB7XG5cdFx0Z2V0TW9kZWw6ICgpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlzQTogKCkgPT4gY2xhc3NOYW1lT0RhdGFNb2RlbCA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiLFxuXHRcdFx0XHRnZXRNZXRhTW9kZWw6ICgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbWV0YU1vZGVsO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXRTZXJ2aWNlVXJsOiAoKSA9PiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0fSxcblx0XHRnZXRTZXJ2aWNlOiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRnZXRDYXBhYmlsaXRpZXM6ICgpID0+IHVuZGVmaW5lZFxuXHRcdFx0fTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IHNlcnZpY2VJbnN0YW5jZSA9IGF3YWl0IG5ldyBTaWRlRWZmZWN0c0ZhY3RvcnkoKS5jcmVhdGVJbnN0YW5jZSh7IHNjb3BlT2JqZWN0LCBzY29wZVR5cGU6IFwiXCIsIHNldHRpbmdzOiB7fSB9KTtcblx0cmV0dXJuIHNlcnZpY2VJbnN0YW5jZS5nZXRJbnRlcmZhY2UoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlRGlhZ25vc3RpY3MgPSBmdW5jdGlvbiAoKTogSURpYWdub3N0aWNzIHtcblx0Y29uc3QgaXNzdWVzOiBhbnlbXSA9IFtdO1xuXHRyZXR1cm4ge1xuXHRcdGFkZElzc3VlKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0aXNzdWVzLnB1c2goe1xuXHRcdFx0XHRpc3N1ZUNhdGVnb3J5LFxuXHRcdFx0XHRpc3N1ZVNldmVyaXR5LFxuXHRcdFx0XHRkZXRhaWxzXG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdGdldElzc3VlcygpOiBhbnlbXSB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzO1xuXHRcdH0sXG5cdFx0Y2hlY2tJZklzc3VlRXhpc3RzKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcy5maW5kKChpc3N1ZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXNzdWUuaXNzdWVDYXRlZ29yeSA9PT0gaXNzdWVDYXRlZ29yeSAmJiBpc3N1ZS5pc3N1ZVNldmVyaXR5ID09PSBpc3N1ZVNldmVyaXR5ICYmIGlzc3VlLmRldGFpbHMgPT09IGRldGFpbHM7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QgPSBmdW5jdGlvbiAoXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG1hbmlmZXN0U2V0dGluZ3M6IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3Ncbikge1xuXHRjb25zdCBjb252ZXJ0ZWRUeXBlcyA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gbWFuaWZlc3RTZXR0aW5ncy5jb250ZXh0UGF0aFxuXHRcdD8gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4obWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1hbmlmZXN0U2V0dGluZ3MuY29udGV4dFBhdGgpIGFzIENvbnRleHQpXG5cdFx0OiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PihtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke21hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0fWApKTtcblx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4oXG5cdFx0Y29udmVydGVkVHlwZXMsXG5cdFx0bmV3IE1hbmlmZXN0V3JhcHBlcihtYW5pZmVzdFNldHRpbmdzKSxcblx0XHRnZXRGYWtlRGlhZ25vc3RpY3MoKSxcblx0XHRkYXRhTW9kZWxQYXRoXG5cdCk7XG59O1xuY29uc3QgbWV0YU1vZGVsQ2FjaGU6IGFueSA9IHt9O1xuZXhwb3J0IGNvbnN0IGdldE1ldGFNb2RlbCA9IGFzeW5jIGZ1bmN0aW9uIChzTWV0YWRhdGFVcmw6IHN0cmluZykge1xuXHRjb25zdCBvUmVxdWVzdG9yID0gX01ldGFkYXRhUmVxdWVzdG9yLmNyZWF0ZSh7fSwgXCI0LjBcIiwgdW5kZWZpbmVkLCB7fSwge30sIGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSk7XG5cdGlmICghbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBuZXcgKE9EYXRhTWV0YU1vZGVsIGFzIGFueSkob1JlcXVlc3Rvciwgc01ldGFkYXRhVXJsLCB1bmRlZmluZWQsIHsgX3JlcXVlc3RBbm5vdGF0aW9uQ2hhbmdlczogKCkgPT4gW10gfSk7XG5cdFx0YXdhaXQgb01ldGFNb2RlbC5mZXRjaEVudGl0eUNvbnRhaW5lcigpO1xuXHRcdG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0gPSBvTWV0YU1vZGVsO1xuXHR9XG5cblx0cmV0dXJuIG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5ID0gZnVuY3Rpb24gPFQgPSBQcm9wZXJ0eSB8IEVudGl0eVNldCB8IEFueUFubm90YXRpb24+KFxuXHRlbnRpdHlTZXQ6IEVudGl0eVNldCxcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRwcm9wZXJ0eT86IFRcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4ge1xuXHRjb25zdCB0YXJnZXRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+ID0ge1xuXHRcdHN0YXJ0aW5nRW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdHRhcmdldE9iamVjdDogcHJvcGVydHksXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogZW50aXR5U2V0LmVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVkVHlwZXM6IGNvbnZlcnRlZFR5cGVzXG5cdH07XG5cdHRhcmdldFBhdGguY29udGV4dExvY2F0aW9uID0gdGFyZ2V0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD47XG5cdHJldHVybiB0YXJnZXRQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nU3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ0luZm8ucGFyc2UoYmluZGluZ1N0cmluZyk7XG5cdHJldHVybiBiaW5kaW5nRWxlbWVudC5mb3JtYXR0ZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbn07XG5cbnR5cGUgTW9kZWxDb250ZW50ID0ge1xuXHRbbmFtZTogc3RyaW5nXTogYW55O1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSBhIGJpbmRpbmcgYWdhaW5zdCBhIG1vZGVsLlxuICogQHBhcmFtIGJpbmRpbmdTdHJpbmcgVGhlIGJpbmRpbmcgc3RyaW5nLlxuICogQHBhcmFtIG1vZGVsQ29udGVudCBDb250ZW50IG9mIHRoZSBkZWZhdWx0IG1vZGVsIHRvIHVzZSBmb3IgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBuYW1lZE1vZGVsc0NvbnRlbnQgQ29udGVudHMgb2YgYWRkaXRpb25hbCwgbmFtZWQgbW9kZWxzIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmluZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbChcblx0YmluZGluZ1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbENvbnRlbnQ6IE1vZGVsQ29udGVudCxcblx0bmFtZWRNb2RlbHNDb250ZW50PzogeyBbbW9kZWxOYW1lOiBzdHJpbmddOiBNb2RlbENvbnRlbnQgfVxuKTogc3RyaW5nIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nSW5mby5wYXJzZShiaW5kaW5nU3RyaW5nLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwge1xuXHRcdFwiLlwiOiB7XG5cdFx0XHRfZm9ybWF0dGVyczoge1xuXHRcdFx0XHRWYWx1ZUZvcm1hdHRlcjogVmFsdWVGb3JtYXR0ZXJcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRjb25zdCB0ZXh0ID0gbmV3IEludmlzaWJsZVRleHQoKTtcblx0dGV4dC5iaW5kUHJvcGVydHkoXCJ0ZXh0XCIsIGJpbmRpbmdFbGVtZW50KTtcblxuXHRjb25zdCBkZWZhdWx0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1vZGVsQ29udGVudCk7XG5cdHRleHQuc2V0TW9kZWwoZGVmYXVsdE1vZGVsKTtcblx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChkZWZhdWx0TW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpKTtcblxuXHRpZiAobmFtZWRNb2RlbHNDb250ZW50KSB7XG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMobmFtZWRNb2RlbHNDb250ZW50KSkge1xuXHRcdFx0Y29uc3QgbW9kZWwgPSBuZXcgSlNPTk1vZGVsKGNvbnRlbnQpO1xuXHRcdFx0dGV4dC5zZXRNb2RlbChtb2RlbCwgbmFtZSk7XG5cdFx0XHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSwgbmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRleHQuZ2V0VGV4dCgpO1xufVxuXG5jb25zdCBURVNUVklFV0lEID0gXCJ0ZXN0Vmlld0lkXCI7XG5cbmNvbnN0IGFwcGx5RmxleENoYW5nZXMgPSBhc3luYyBmdW5jdGlvbiAoZmxleENoYW5nZXM6IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sIG9NZXRhTW9kZWw6IE1ldGFNb2RlbCwgcmVzdWx0WE1MOiBhbnkpIHtcblx0Ly8gcHJlZml4IElkc1xuXHRbLi4ucmVzdWx0WE1MLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbaWRdXCIpXS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0bm9kZS5pZCA9IGAke1RFU1RWSUVXSUR9LS0ke25vZGUuaWR9YDtcblx0fSk7XG5cdGNvbnN0IGNoYW5nZXMgPSBjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QoVEVTVFZJRVdJRCwgZmxleENoYW5nZXMpO1xuXHRjb25zdCBhcHBJZCA9IFwic29tZUNvbXBvbmVudFwiO1xuXHRjb25zdCBvTWFuaWZlc3QgPSB7XG5cdFx0XCJzYXAuYXBwXCI6IHtcblx0XHRcdGlkOiBhcHBJZCxcblx0XHRcdHR5cGU6IFwiYXBwbGljYXRpb25cIixcblx0XHRcdGNyb3NzTmF2aWdhdGlvbjoge1xuXHRcdFx0XHRvdXRib3VuZHM6IFtdXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgPSB7XG5cdFx0Z2V0RGlhZ25vc3RpY3M6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoZ2V0RmFrZURpYWdub3N0aWNzKCkpLFxuXHRcdGdldE1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdGdldE1ldGFNb2RlbDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShvTWV0YU1vZGVsKVxuXHRcdH0pLFxuXHRcdGdldENvbXBvbmVudERhdGE6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe30pLFxuXHRcdGdldE1hbmlmZXN0T2JqZWN0OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdGdldEVudHJ5OiBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiAob01hbmlmZXN0IGFzIGFueSlbbmFtZV07XG5cdFx0XHR9XG5cdFx0fSksXG5cdFx0Z2V0TG9jYWxJZDogamVzdC5mbigoc0lkKSA9PiBzSWQpXG5cdH0gYXMgdW5rbm93biBhcyBBcHBDb21wb25lbnQ7XG5cdC8vZmFrZSBjaGFuZ2VzXG5cdGplc3Quc3B5T24oQXBwU3RvcmFnZSwgXCJsb2FkRmxleERhdGFcIikubW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZShjaGFuZ2VzKSk7XG5cdGplc3Quc3B5T24oTG9hZGVyLCBcImdldEZsZXhEYXRhXCIpLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoeyBkYXRhOiBjaGFuZ2VzIH0pKTtcblx0amVzdC5zcHlPbihMb2FkZXIsIFwiZ2V0Q2FjaGVkRmxleERhdGFcIikubW9ja1JldHVyblZhbHVlKGNoYW5nZXMpO1xuXG5cdGplc3Quc3B5T24oQ29tcG9uZW50IGFzIHVua25vd24gYXMgeyBnZXRDb21wb25lbnRCeUlkOiAoKSA9PiBBcHBDb21wb25lbnQgfSwgXCJnZXRDb21wb25lbnRCeUlkXCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0amVzdC5zcHlPbihVdGlscywgXCJnZXRBcHBDb21wb25lbnRGb3JDb250cm9sXCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0YXdhaXQgRmxleFN0YXRlLmluaXRpYWxpemUoe1xuXHRcdGNvbXBvbmVudElkOiBhcHBJZFxuXHR9KTtcblx0cmVzdWx0WE1MID0gYXdhaXQgWG1sUHJlcHJvY2Vzc29yLnByb2Nlc3MocmVzdWx0WE1MLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiLCBjb21wb25lbnRJZDogYXBwSWQsIGlkOiBURVNUVklFV0lEIH0pO1xuXG5cdC8vQXNzZXJ0IHRoYXQgYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIGFwcGxpZWRcblx0Y29uc3QgY2hhbmdlc0FwcGxpZWQgPSBnZXRDaGFuZ2VzRnJvbVhNTChyZXN1bHRYTUwpO1xuXHRleHBlY3QoY2hhbmdlc0FwcGxpZWQubGVuZ3RoKS50b0JlKGZsZXhDaGFuZ2VzPy5jaGFuZ2VzPy5sZW5ndGggPz8gMCArIGZsZXhDaGFuZ2VzPy52YXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXM/Lmxlbmd0aCA/PyAwKTtcblx0cmV0dXJuIHJlc3VsdFhNTDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDaGFuZ2VzRnJvbVhNTCA9ICh4bWw6IGFueSkgPT5cblx0Wy4uLnhtbC5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKV1cblx0XHQuZmxhdE1hcCgoZSkgPT4gWy4uLmUuYXR0cmlidXRlc10ubWFwKChhKSA9PiBhLm5hbWUpKVxuXHRcdC5maWx0ZXIoKGF0dHIpID0+IGF0dHIuaW5jbHVkZXMoXCJzYXAudWkuZmwuYXBwbGllZENoYW5nZXNcIikpO1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGluZ1Jlc3VsdCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IGFueTsgZW50aXR5U2V0Pzogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbikge1xuXHRpZiAoIW1Nb2RlbHNbXCJzYXAuZmUuaTE4blwiXSkge1xuXHRcdG1Nb2RlbHNbXCJzYXAuZmUuaTE4blwiXSA9IGNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsKCk7XG5cdH1cblxuXHRjb25zdCB0ZW1wbGF0ZWRYbWwgPSBgPHJvb3Q+JHt4bWxJbnB1dH08L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblx0Y29uc3QgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0ZW1wbGF0ZWRYbWwsIFwidGV4dC94bWxcIik7XG5cdC8vIFRvIGVuc3VyZSBvdXIgbWFjcm8gY2FuIHVzZSAjc2V0QmluZGluZ0NvbnRleHQgd2UgZW5zdXJlIHRoZXJlIGlzIGEgcHJlIGV4aXN0aW5nIEpTT05Nb2RlbCBmb3IgY29udmVydGVyQ29udGV4dFxuXHQvLyBpZiBub3QgYWxyZWFkeSBwYXNzZWQgdG8gdGVoIHRlbXBsYXRpbmdcblxuXHRjb25zdCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSBhd2FpdCBfYnVpbGRQcmVQcm9jZXNzb3JTZXR0aW5ncyhzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMsIGZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cblx0Ly9UaGlzIGNvbnRleHQgZm9yIG1hY3JvIHRlc3Rpbmdcblx0aWYgKG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdKSB7XG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tcInRoaXNcIl0gPSBvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXS5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG5cdH1cblxuXHRsZXQgcmVzdWx0WE1MID0gKGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKHhtbERvYy5maXJzdEVsZW1lbnRDaGlsZCEsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKSkgYXMgYW55O1xuXG5cdGlmIChzTWV0YWRhdGFVcmwgJiYgZmxleENoYW5nZXMpIHtcblx0XHQvLyBhcHBseSBmbGV4IGNoYW5nZXNcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdFx0cmVzdWx0WE1MID0gYXdhaXQgYXBwbHlGbGV4Q2hhbmdlcyhmbGV4Q2hhbmdlcywgb01ldGFNb2RlbCwgcmVzdWx0WE1MKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRlbXBsYXRlZFhNTCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmxleENoYW5nZXM/OiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duLFxuXHRvcHRpb25zPzogeyBrZWVwRHluYW1pY0lkcz86IGJvb2xlYW4gfVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0cmV0dXJuIGpzeC5kZWZpbmVYTUxOYW1lc3BhY2VNYXAocmV2ZXNlTmFtZXNwYWNlTWFwLCBhc3luYyAoKSA9PiB7XG5cdFx0Y29uc3QgdGVtcGxhdGVkWE1MID0gYXdhaXQgZ2V0VGVtcGxhdGluZ1Jlc3VsdChcblx0XHRcdHhtbElucHV0LFxuXHRcdFx0c01ldGFkYXRhVXJsLFxuXHRcdFx0bUJpbmRpbmdDb250ZXh0cyxcblx0XHRcdG1Nb2RlbHMsXG5cdFx0XHRmbGV4Q2hhbmdlcyxcblx0XHRcdGZha2VTaWRlRWZmZWN0U2VydmljZVxuXHRcdCk7XG5cdFx0Y29uc3Qgc2VyaWFsaWVkWE1MID0gc2VyaWFsaXplWE1MKHRlbXBsYXRlZFhNTCwgdW5kZWZpbmVkLCBvcHRpb25zKTtcblx0XHRleHBlY3Qoc2VyaWFsaWVkWE1MKS5ub3QudG9IYXZlVGVtcGxhdGluZ0Vycm9ycygpO1xuXHRcdHJldHVybiBzZXJpYWxpZWRYTUw7XG5cdH0pIGFzIHVua25vd24gYXMgUHJvbWlzZTxzdHJpbmc+O1xufTtcblxuLyoqXG4gKiBQcm9jZXNzIHRoZSByZXF1ZXN0ZWQgdmlldyB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICogQHBhcmFtIG5hbWUgRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHZpZXcgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHNNZXRhZGF0YVVybCBVcmwgb2YgdGhlIG1ldGFkYXRhLlxuICogQHBhcmFtIG1CaW5kaW5nQ29udGV4dHMgTWFwIG9mIHRoZSBiaW5kaW5nQ29udGV4dHMgdG8gc2V0IG9uIHRoZSBtb2RlbHMuXG4gKiBAcGFyYW0gbU1vZGVscyBNYXAgb2YgdGhlIG1vZGVscy5cbiAqIEBwYXJhbSBmbGV4Q2hhbmdlcyBPYmplY3Qgd2l0aCBVSSBjaGFuZ2VzIGxpa2UgJ2NoYW5nZXMnIG9yICd2YXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMnXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgdmlldyBhcyBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KFxuXHRuYW1lOiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfVxuKTogUHJvbWlzZTxKZXN0VGVtcGxhdGVkVmlldz4ge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdGNvbnN0IG9WaWV3RG9jdW1lbnQgPSBfbG9hZFJlc291cmNlVmlldyhuYW1lKTtcblx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzID0gYXdhaXQgX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3Moc01ldGFkYXRhVXJsLCBtQmluZGluZ0NvbnRleHRzLCBtTW9kZWxzKTtcblx0bGV0IG9QcmVwcm9jZXNzZWRWaWV3ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3Mob1ZpZXdEb2N1bWVudCwgeyBuYW1lOiBuYW1lIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncyk7XG5cdGlmIChmbGV4Q2hhbmdlcykge1xuXHRcdG9QcmVwcm9jZXNzZWRWaWV3ID0gYXdhaXQgYXBwbHlGbGV4Q2hhbmdlcyhmbGV4Q2hhbmdlcyA/PyBbXSwgb01ldGFNb2RlbCwgb1ByZXByb2Nlc3NlZFZpZXcpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0YXNFbGVtZW50OiBvUHJlcHJvY2Vzc2VkVmlldyxcblx0XHRhc1N0cmluZzogZm9ybWF0WE1MKG9QcmVwcm9jZXNzZWRWaWV3Py5vdXRlckhUTUwgfHwgXCJcIilcblx0fTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIHRoZSByZXF1ZXN0ZWQgWE1MIGZyYWdtZW50IHdpdGggdGhlIHByb3ZpZGVkIGRhdGEuXG4gKiBAcGFyYW0gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZnJhZ21lbnQgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHRlc3REYXRhIFRlc3QgZGF0YSBjb25zaXN0aW5nXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgZnJhZ21lbnQgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRnJhZ21lbnQobmFtZTogc3RyaW5nLCB0ZXN0RGF0YTogeyBbbW9kZWw6IHN0cmluZ106IG9iamVjdCB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgaW5wdXRYbWwgPSBgPHJvb3Q+PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwiJHtuYW1lfVwiIHR5cGU9XCJYTUxcIiB4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIiAvPjwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXG5cdGNvbnN0IGlucHV0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhpbnB1dFhtbCwgXCJ0ZXh0L3htbFwiKTtcblxuXHQvLyBidWlsZCBtb2RlbCBhbmQgYmluZGluZ3MgZm9yIGdpdmVuIHRlc3QgZGF0YVxuXHRjb25zdCBzZXR0aW5ncyA9IHtcblx0XHRtb2RlbHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB9LFxuXHRcdGJpbmRpbmdDb250ZXh0czoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogb2JqZWN0IH0sXG5cdFx0YXBwQ29tcG9uZW50OiB7IGdldFNpZGVFZmZlY3RzU2VydmljZTogamVzdC5mbigpLCBnZXREaWFnbm9zdGljczogKCkgPT4gdW5kZWZpbmVkIH1cblx0fTtcblx0Zm9yIChjb25zdCBtb2RlbCBpbiB0ZXN0RGF0YSkge1xuXHRcdGNvbnN0IGpzb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRqc29uTW9kZWwuc2V0RGF0YSh0ZXN0RGF0YVttb2RlbF0pO1xuXHRcdHNldHRpbmdzLm1vZGVsc1ttb2RlbF0gPSBqc29uTW9kZWw7XG5cdFx0c2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW21vZGVsXSA9IHNldHRpbmdzLm1vZGVsc1ttb2RlbF0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cdHNldHRpbmdzLmFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UubW9ja1JldHVyblZhbHVlKGRlZmF1bHRGYWtlU2lkZUVmZmVjdFNlcnZpY2UpO1xuXG5cdC8vIGV4ZWN1dGUgdGhlIHByZS1wcm9jZXNzb3Jcblx0Y29uc3QgcmVzdWx0RG9jID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoaW5wdXREb2MuZmlyc3RFbGVtZW50Q2hpbGQsIHsgbmFtZSB9LCBzZXR0aW5ncyk7XG5cblx0Ly8gZXhjbHVkZSBuZXN0ZWQgZnJhZ21lbnRzIGZyb20gdGVzdCBzbmFwc2hvdHNcblx0Y29uc3QgZnJhZ21lbnRzID0gcmVzdWx0RG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY29yZTpGcmFnbWVudFwiKSBhcyBhbnk7XG5cdGlmIChmcmFnbWVudHM/Lmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0ZnJhZ21lbnQuaW5uZXJIVE1MID0gXCJcIjtcblx0XHR9XG5cdH1cblxuXHQvLyBLZWVwIHRoZSBmcmFnbWVudCByZXN1bHQgYXMgY2hpbGQgb2Ygcm9vdCBub2RlIHdoZW4gZnJhZ21lbnQgZ2VuZXJhdGVzIG11bHRpcGxlIHJvb3QgY29udHJvbHNcblx0Y29uc3QgeG1sUmVzdWx0ID0gcmVzdWx0RG9jLmNoaWxkcmVuLmxlbmd0aCA+IDEgPyByZXN1bHREb2Mub3V0ZXJIVE1MIDogcmVzdWx0RG9jLmlubmVySFRNTDtcblxuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFJlc3VsdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgc3RyaW5nIG9mIHRhYiBjaGFyYWN0ZXJzIGZvciBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSB0YWJDb3VudCBUaGUgbnVtYmVyIG9mIHRhYnMgdG8gZ2VuZXJhdGUuXG4gKiBAcGFyYW0gdG9BZGQgQWRkaXRpb25hbCB0YWJzIHRvIGFkZC5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIG9mIHRhYiBjaGFyYWN0ZXJzLlxuICovXG5mdW5jdGlvbiBnZXRUYWIodGFiQ291bnQ6IG51bWJlciwgdG9BZGQgPSAwKSB7XG5cdGxldCB0YWIgPSBcIlwiO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHRhYkNvdW50ICsgdG9BZGQ7IGkrKykge1xuXHRcdHRhYiArPSBcIlxcdFwiO1xuXHR9XG5cdHJldHVybiB0YWI7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgZHluYW1pYyBJRHMgaW4gYSBzdHJpbmcgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICogQHBhcmFtIGlkIFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgZHluYW1pYyBJRHMuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHdpdGggZHluYW1pYyBJRHMgcmVwbGFjZWQuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUR5bmFtaWNJZChpZDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgVUlEID0gL3VpZC0taWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGNvbnN0IENPTlRST0xJRCA9IC9pZC1cXGR7MTN9LVxcZHsxLDN9Lztcblx0cmV0dXJuIGlkLnJlcGxhY2UoVUlELCBcInVpZC0taWRcIikucmVwbGFjZShDT05UUk9MSUQsIFwiaWRcIik7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGZyb20gYSBjb250cm9sLCB3aXRoIG9wdGlvbnMgdG8gaGFuZGxlIGR5bmFtaWMgSURzLlxuICogQHBhcmFtIGNvbnRyb2wgVGhlIGNvbnRyb2wgdG8gcmV0cmlldmUgdGhlIHByb3BlcnR5IGZyb20uXG4gKiBAcGFyYW0gcHJvcGVydHlLZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzZXR0aW5ncyBmb3IgcmV0cmlldmluZyB0aGUgcHJvcGVydHkuXG4gKiBAcGFyYW0gb3B0aW9ucy5rZWVwRHluYW1pY0lkcyBJZiBzZXQgdG8gdHJ1ZSwgZHluYW1pYyBJRHMgYXJlIG5vdCByZXBsYWNlZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LCBvciB1bmRlZmluZWQgaWYgdGhlIHByb3BlcnR5IGRvZXMgbm90IGV4aXN0LlxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShcblx0Y29udHJvbDogQ29udHJvbCxcblx0cHJvcGVydHlLZXk6IHN0cmluZyxcblx0b3B0aW9ucz86IHtcblx0XHRrZWVwRHluYW1pY0lkcz86IGJvb2xlYW47XG5cdH1cbikge1xuXHRsZXQgcHJvcGVydHlWYWx1ZSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRwcm9wZXJ0eVZhbHVlID0gb3B0aW9ucz8ua2VlcER5bmFtaWNJZHMgIT09IHRydWUgPyByZW1vdmVEeW5hbWljSWQocHJvcGVydHlWYWx1ZSkgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdGlmIChwcm9wZXJ0eVZhbHVlID09PSBcIlwiKSB7XG5cdFx0XHRwcm9wZXJ0eVZhbHVlID0gXCI8ZW1wdHlTdHJpbmc+XCI7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0dHJ5IHtcblx0XHRcdHByb3BlcnR5VmFsdWUgPSBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eVZhbHVlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBTdHJpbmdpZnkgbWF5IGZhaWwgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYnV0IGl0J3Mgbm90IHRoZSBlbmQgb2YgdGhlIHdvcmxkXG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9wZXJ0eVZhbHVlO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYmluZGluZyBvZiBhIHByb3BlcnR5IGZyb20gYSBjb250cm9sLlxuICogQHBhcmFtIGNvbnRyb2wgVGhlIGNvbnRyb2wgdG8gcmV0cmlldmUgdGhlIGJpbmRpbmcgZnJvbS5cbiAqIEBwYXJhbSBwcm9wZXJ0eUtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byByZXRyaWV2ZSB0aGUgYmluZGluZyBmb3IuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzZXR0aW5ncyBmb3IgcmV0cmlldmluZyB0aGUgYmluZGluZy5cbiAqIEBwYXJhbSBvcHRpb25zLmtlZXBEeW5hbWljSWRzIElmIHNldCB0byB0cnVlLCBkeW5hbWljIElEcyBhcmUgbm90IHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZS5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRCaW5kaW5nSW5mbyhcblx0Y29udHJvbDogQ29udHJvbCxcblx0cHJvcGVydHlLZXk6IHN0cmluZyxcblx0b3B0aW9ucz86IHtcblx0XHRrZWVwRHluYW1pY0lkcz86IGJvb2xlYW47XG5cdH1cbikge1xuXHRjb25zdCBiaW5kaW5nRGV0YWlsID0geyAuLi4oY29udHJvbC5nZXRCaW5kaW5nSW5mbyhwcm9wZXJ0eUtleSkgYXMgUmVjb3JkPHN0cmluZywgUHJvcGVydHlCaW5kaW5nSW5mbz4pIH07XG5cdGlmIChiaW5kaW5nRGV0YWlsLnR5cGU/Lm9PdXRwdXRGb3JtYXQpIHtcblx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50eXBlLm9PdXRwdXRGb3JtYXQ7XG5cdH1cblx0aWYgKGJpbmRpbmdEZXRhaWwuYmluZGluZykge1xuXHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLmJpbmRpbmc7XG5cdH1cblx0Y29uc3QgdmFsdWUgPSBKU09OLnN0cmluZ2lmeShiaW5kaW5nRGV0YWlsKTtcblx0cmV0dXJuIG9wdGlvbnM/LmtlZXBEeW5hbWljSWRzICE9PSB0cnVlID8gcmVtb3ZlRHluYW1pY0lkKHZhbHVlKSA6IHZhbHVlO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgb2YgYSBjb250cm9sIGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0gY29udHJvbCBUaGUgY29udHJvbCB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0gY29udHJvbC5tUHJvcGVydGllcyBUaGUgcHJvcGVydGllcyBvZiB0aGUgY29udHJvbC5cbiAqIEBwYXJhbSBjb250cm9sLm1CaW5kaW5nSW5mb3MgVGhlIGJpbmRpbmcgaW5mb3JtYXRpb24gb2YgdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gdGFiQ291bnQgVGhlIGN1cnJlbnQgdGFiIGxldmVsIGZvciBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIHNldHRpbmdzIGZvciBzZXJpYWxpemF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMua2VlcER5bmFtaWNJZHMgSWYgc2V0IHRvIHRydWUsIGR5bmFtaWMgSURzIGFyZSBub3QgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICogQHBhcmFtIG9wdGlvbnMuaWdub3JlS2V5cyBMaXN0IG9mIHByb3BlcnR5IGtleXMgdG8gaWdub3JlIGR1cmluZyBzZXJpYWxpemF0aW9uLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRyb2wncyBwcm9wZXJ0aWVzLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVQcm9wZXJ0aWVzKFxuXHRjb250cm9sOiBDb250cm9sLFxuXHR0YWJDb3VudDogbnVtYmVyLFxuXHRvcHRpb25zPzoge1xuXHRcdGtlZXBEeW5hbWljSWRzPzogYm9vbGVhbjtcblx0XHRpZ25vcmVLZXlzPzogc3RyaW5nW107XG5cdH1cbik6IHN0cmluZyB7XG5cdGxldCBkYXRhID0gXCJcIjtcblx0Y29uc3QgaWdub3JlS2V5cyA9IG9wdGlvbnM/Lmlnbm9yZUtleXMgPz8gW107XG5cdGNvbnN0IGtlZXBEeW5hbWljSWRzID0gb3B0aW9ucz8ua2VlcER5bmFtaWNJZHMgPT09IHRydWU7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0QWxsUHJvcGVydGllcygpKS5maWx0ZXIoKHByb3BlcnR5S2V5KSA9PiAhaWdub3JlS2V5cy5pbmNsdWRlcyhwcm9wZXJ0eUtleSkpO1xuXHRwcm9wZXJ0aWVzLnNvcnQoKTtcblx0Zm9yIChjb25zdCBwcm9wZXJ0eUtleSBvZiBwcm9wZXJ0aWVzKSB7XG5cdFx0aWYgKCFjb250cm9sLmlzUHJvcGVydHlJbml0aWFsKHByb3BlcnR5S2V5KSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IGdldFByb3BlcnR5KGNvbnRyb2wsIHByb3BlcnR5S2V5LCB7IGtlZXBEeW5hbWljSWRzIH0pO1xuXHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtwcm9wZXJ0eUtleX06ICR7cHJvcGVydHlWYWx1ZX1gO1xuXHRcdFx0aWYgKGNvbnRyb2wuaXNCb3VuZChwcm9wZXJ0eUtleSkpIHtcblx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtwcm9wZXJ0eUtleX1fX0JpbmRpbmdJbmZvOiAke2dldEJpbmRpbmdJbmZvKGNvbnRyb2wsIHByb3BlcnR5S2V5LCB7IGtlZXBEeW5hbWljSWRzIH0pfWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGFzc29jaWF0aW9ucyBvZiBhIGNvbnRyb2wgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSBjb250cm9sIFRoZSBjb250cm9sIHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSB0YWJDb3VudCBUaGUgY3VycmVudCB0YWIgbGV2ZWwgZm9yIGluZGVudGF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVLZXlzIExpc3Qgb2YgYXNzb2NpYXRpb24ga2V5cyB0byBpZ25vcmUgZHVyaW5nIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5rZWVwRHluYW1pY0lkcyBJZiBzZXQgdG8gdHJ1ZSwgZHluYW1pYyBJRHMgYXJlIG5vdCByZXBsYWNlZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udHJvbCdzIGFzc29jaWF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplQXNzb2NpYXRpb25zKFxuXHRjb250cm9sOiBDb250cm9sLFxuXHR0YWJDb3VudDogbnVtYmVyLFxuXHRvcHRpb25zPzoge1xuXHRcdGlnbm9yZUtleXM/OiBzdHJpbmdbXTtcblx0XHRrZWVwRHluYW1pY0lkcz86IGJvb2xlYW47XG5cdH1cbik6IHN0cmluZyB7XG5cdGxldCBkYXRhID0gXCJcIjtcblx0Y29uc3Qga2VlcER5bmFtaWNJZHMgPSBvcHRpb25zPy5rZWVwRHluYW1pY0lkcyA9PT0gdHJ1ZTtcblx0Y29uc3QgaWdub3JlS2V5cyA9IG9wdGlvbnM/Lmlnbm9yZUtleXMgPz8gW107XG5cdGNvbnN0IGFzc29jaWF0aW9uS2V5cyA9IE9iamVjdC5rZXlzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXRBbGxBc3NvY2lhdGlvbnMoKSkuZmlsdGVyKChrZXkpID0+ICFpZ25vcmVLZXlzLmluY2x1ZGVzKGtleSkpO1xuXHRhc3NvY2lhdGlvbktleXMuc29ydCgpO1xuXHRmb3IgKGNvbnN0IGFzc29jaWF0aW9uS2V5IG9mIGFzc29jaWF0aW9uS2V5cykge1xuXHRcdGxldCBhc3NvY2lhdGlvblZhbHVlID0gY29udHJvbC5nZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSwgbnVsbCk7XG5cdFx0aWYgKGFzc29jaWF0aW9uVmFsdWUpIHtcblx0XHRcdGlmICghQXJyYXkuaXNBcnJheShhc3NvY2lhdGlvblZhbHVlKSkge1xuXHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gW2Fzc29jaWF0aW9uVmFsdWVdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXNzb2NpYXRpb25WYWx1ZSkgJiYgYXNzb2NpYXRpb25WYWx1ZS5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0YXNzb2NpYXRpb25WYWx1ZSA9IGFzc29jaWF0aW9uVmFsdWUubWFwKChhc3NvY2lhdGlvblZhbHVlRWxlbWVudDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIE1hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50KSAmJiAha2VlcER5bmFtaWNJZHNcblx0XHRcdFx0XHRcdFx0PyBcIl9fZHluYW1pY0lkXCJcblx0XHRcdFx0XHRcdFx0OiByZW1vdmVEeW5hbWljSWQoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHthc3NvY2lhdGlvbktleX06ICR7YXNzb2NpYXRpb25WYWx1ZS5qb2luPy4oXCIsXCIpIHx8IHVuZGVmaW5lZH1gO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBldmVudHMgb2YgYSBjb250cm9sIGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0gY29udHJvbCBUaGUgY29udHJvbCB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0gY29udHJvbC5tRXZlbnRSZWdpc3RyeSBUaGUgZXZlbnRzIG9mIHRoZSBjb250cm9sLlxuICogQHBhcmFtIHRhYkNvdW50IFRoZSBjdXJyZW50IHRhYiBsZXZlbCBmb3IgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzZXR0aW5ncyBmb3Igc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZUtleXMgTGlzdCBvZiBldmVudCBrZXlzIHRvIGlnbm9yZSBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250cm9sJ3MgZXZlbnRzLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVFdmVudHMoXG5cdGNvbnRyb2w6IENvbnRyb2wsXG5cdHRhYkNvdW50OiBudW1iZXIsXG5cdG9wdGlvbnM/OiB7XG5cdFx0aWdub3JlS2V5cz86IHN0cmluZ1tdO1xuXHR9XG4pOiBzdHJpbmcge1xuXHRsZXQgZGF0YSA9IFwiXCI7XG5cdGNvbnN0IGludGVybmFsVUk1RXZlbnRzID0gW1wiRXZlbnRIYW5kbGVyQ2hhbmdlXCIsIFwiX2NoYW5nZVwiXTtcblx0Y29uc3QgaWdub3JlS2V5cyA9IG9wdGlvbnM/Lmlnbm9yZUtleXMgPz8gW107XG5cdGNvbnN0IGV2ZW50SWRzID0gT2JqZWN0LmtleXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldEFsbEV2ZW50cygpKS5jb25jYXQoaW50ZXJuYWxVSTVFdmVudHMpO1xuXHRldmVudElkcy5zb3J0KCk7XG5cdGZvciAoY29uc3QgZXZlbnRLZXkgb2YgZXZlbnRJZHMpIHtcblx0XHRpZiAoY29udHJvbC5oYXNMaXN0ZW5lcnMoZXZlbnRLZXkpICYmICFpZ25vcmVLZXlzLmluY2x1ZGVzKGV2ZW50S2V5KSkge1xuXHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtldmVudEtleX06IHRydWVgO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBcdFNlcmlhbGl6ZXMgYSBVSTUgY29udHJvbCBvciBhbiBhcnJheSBvZiBVSTUgY29udHJvbHMgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSBjb250cm9sVG9TZXJpYWxpemUgVGhlIGNvbnRyb2wgb3IgYXJyYXkgb2YgY29udHJvbHMgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5zaG93Q3VzdG9tU3R5bGVDbGFzc2VzIElmIHNldCB0byB0cnVlLCBjdXN0b20gc3R5bGUgY2xhc3NlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBzZXJpYWxpemF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMua2VlcER5bmFtaWNJZHMgSWYgc2V0IHRvIHRydWUsIGR5bmFtaWMgSURzIGFyZSBub3QgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICogQHBhcmFtIG9wdGlvbnMuaWdub3JlS2V5cyBMaXN0IG9mIHByb3BlcnR5LCBhc3NvY2lhdGlvbiwgYW5kIGV2ZW50IGtleXMgdG8gaWdub3JlIGR1cmluZyBzZXJpYWxpemF0aW9uLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRyb2wgb3IgYXJyYXkgb2YgY29udHJvbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVDb250cm9sKFxuXHRjb250cm9sVG9TZXJpYWxpemU/OiBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdLFxuXHRvcHRpb25zPzoge1xuXHRcdHNob3dDdXN0b21TdHlsZUNsYXNzZXM/OiBib29sZWFuO1xuXHRcdGtlZXBEeW5hbWljSWRzPzogYm9vbGVhbjtcblx0XHRpZ25vcmVLZXlzPzogc3RyaW5nW107XG5cdH1cbik6IHN0cmluZyB8IHN0cmluZ1tdIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblxuXHRjb25zdCBrZWVwRHluYW1pY0lkcyA9IG9wdGlvbnM/LmtlZXBEeW5hbWljSWRzID09PSB0cnVlO1xuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pPy5pbmRleE9mPy4oY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAsXFxuJHtnZXRUYWIodGFiQ291bnQpfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCR7Y29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX0oYDtcblx0XHRcdHJldHVybiBjb250cm9sRGV0YWlsO1xuXHRcdH0sXG5cdFx0ZW5kOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gXCJ9KVwiO1xuXHRcdH0sXG5cdFx0bWlkZGxlOiBmdW5jdGlvbiAoY29udHJvbDogYW55KSB7XG5cdFx0XHRsZXQgaWQgPSBjb250cm9sLmdldElkKCk7XG5cdFx0XHRpZCA9IHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IHJlbW92ZUR5bmFtaWNJZChpZCkgOiBpZDtcblx0XHRcdGxldCBkYXRhID0gYHtpZDogJHtNYW5hZ2VkT2JqZWN0TWV0YWRhdGEuaXNHZW5lcmF0ZWRJZChpZCkgJiYgIWtlZXBEeW5hbWljSWRzID8gXCJfX2R5bmFtaWNJZFwiIDogaWR9YDtcblx0XHRcdGRhdGEgKz0gc2VyaWFsaXplUHJvcGVydGllcyhjb250cm9sLCB0YWJDb3VudCwgb3B0aW9ucyk7XG5cdFx0XHRpZiAoY29udHJvbC5tQWdncmVnYXRpb25zPy50b29sdGlwICYmIHR5cGVvZiBjb250cm9sLm1BZ2dyZWdhdGlvbnM/LnRvb2x0aXAgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0Ly8gaW4gY2FzZSB0ZWggdG9vbHRpcCBpcyBzdG9yZWQgYSBzIHN0cmluZyB0aGUgc2VyaWFsaXphdGlvbiBuZWVkcyB0byBiZSBkb25lIG1hbnVhbGx5XG5cdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYih0YWJDb3VudCl9IHRvb2x0aXA6ICR7Y29udHJvbC5tQWdncmVnYXRpb25zLnRvb2x0aXB9YDtcblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gc2VyaWFsaXplQXNzb2NpYXRpb25zKGNvbnRyb2wsIHRhYkNvdW50LCBvcHRpb25zKTtcblx0XHRcdGlmIChvcHRpb25zPy5zaG93Q3VzdG9tU3R5bGVDbGFzc2VzID09PSB0cnVlICYmIGNvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIodGFiQ291bnQpfSBjdXN0b21TdHlsZUNsYXNzZXMgOiAke2NvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcy5qb2luKFwiLCBcIil9YDtcblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gc2VyaWFsaXplRXZlbnRzKGNvbnRyb2wsIHRhYkNvdW50LCBvcHRpb25zKTtcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH0sXG5cdFx0c3RhcnRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IHsgbUJpbmRpbmdJbmZvczogUmVjb3JkPHN0cmluZywgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8+IH0sIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBvdXQgPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0ke3NOYW1lfWA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRvdXQgKz0gYD17IHBhdGg6JyR7Y29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXS5wYXRofScsIHRlbXBsYXRlOlxcbiR7Z2V0VGFiKHRhYkNvdW50KX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0ICs9IGA9W1xcbiR7Z2V0VGFiKHRhYkNvdW50KX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG91dDtcblx0XHR9LFxuXHRcdGVuZEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHR0YWJDb3VudC0tO1xuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYih0YWJDb3VudCl9fWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX1dYDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xUb1NlcmlhbGl6ZSkpIHtcblx0XHRyZXR1cm4gY29udHJvbFRvU2VyaWFsaXplLm1hcCgoY29udHJvbFRvUmVuZGVyOiBVSTVFbGVtZW50KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvUmVuZGVyLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1NlcmlhbGl6ZSwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVDb250cm9sQXNYTUwoXG5cdGNvbnRyb2xUb1NlcmlhbGl6ZT86IE1hbmFnZWRPYmplY3QgfCBNYW5hZ2VkT2JqZWN0W10gfCBudWxsLFxuXHRzaG93Q3VzdG9tU3R5bGVDbGFzc2VzID0gZmFsc2UsXG5cdHByZWZlclZhbHVlID0gZmFsc2UsXG5cdGlnbm9yZUtleXM6IHN0cmluZ1tdID0gW11cbikge1xuXHRsZXQgdGFiQ291bnQgPSAwO1xuXHRjb25zdCBkZWZpbmVkTmFtZXNwYWNlczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG5cdGZ1bmN0aW9uIGdldE5hbWVzcGFjZUFsaWFzKGNsYXNzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBuYW1lc1NwbGl0ID0gY2xhc3NOYW1lLnNwbGl0KFwiLlwiKTtcblx0XHRjb25zdCBuYW1lc3BhY2UgPSBuYW1lc1NwbGl0LnNsaWNlKDAsIC0xKTtcblx0XHRsZXQgbmFtZXNwYWNlQWxpYXMgPSBuYW1lc3BhY2VbbmFtZXNwYWNlLmxlbmd0aCAtIDFdO1xuXHRcdGlmIChyZXZlc2VOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXSkge1xuXHRcdFx0bmFtZXNwYWNlQWxpYXMgPSByZXZlc2VOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXTtcblx0XHR9XG5cdFx0aWYgKG5hbWVzcGFjZUFsaWFzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG5hbWVzcGFjZUFsaWFzID0gXCJ0ZXN0XCI7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lc3BhY2VBbGlhcztcblx0fVxuXG5cdGNvbnN0IHNlcmlhbGl6ZURlbGVnYXRlID0ge1xuXHRcdHN0YXJ0OiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBjb250cm9sRGV0YWlsID0gXCJcIjtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLmdldFBhcmVudCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW5kZXhJblBhcmVudCA9IChjb250cm9sLmdldFBhcmVudCgpLmdldEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUpIGFzIE1hbmFnZWRPYmplY3RbXSk/LmluZGV4T2Y/Lihjb250cm9sKTtcblx0XHRcdFx0XHRpZiAoaW5kZXhJblBhcmVudCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbmFtZUZ1bGwgPSBjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdFx0Y29uc3QgbmFtZXNTcGxpdCA9IG5hbWVGdWxsLnNwbGl0KFwiLlwiKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKG5hbWVGdWxsKTtcblx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYDwke25hbWVzcGFjZUFsaWFzfToke25hbWV9XFxuYDtcblx0XHRcdGlmICghZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdKSB7XG5cdFx0XHRcdGRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXSA9IDE7XG5cdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCR7Z2V0VGFiKHRhYkNvdW50KX14bWxuczoke25hbWVzcGFjZUFsaWFzfT1cIiR7bmFtZVNwYWNlTWFwW25hbWVzcGFjZUFsaWFzXX1cIlxcbmA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZpbmVkTmFtZXNwYWNlc1tuYW1lc3BhY2VBbGlhc10rKztcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb250cm9sRGV0YWlsO1xuXHRcdH0sXG5cdFx0ZW5kOiBmdW5jdGlvbiAoY29udHJvbDogYW55KSB7XG5cdFx0XHRjb25zdCBuYW1lRnVsbCA9IGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cdFx0XHRjb25zdCBuYW1lc1NwbGl0ID0gbmFtZUZ1bGwuc3BsaXQoXCIuXCIpO1xuXHRcdFx0Y29uc3QgbmFtZSA9IG5hbWVzU3BsaXRbbmFtZXNTcGxpdC5sZW5ndGggLSAxXTtcblx0XHRcdGNvbnN0IG5hbWVzcGFjZUFsaWFzID0gZ2V0TmFtZXNwYWNlQWxpYXMobmFtZUZ1bGwpO1xuXHRcdFx0bGV0IGhhc0FnZ3JlZ2F0aW9uID0gZmFsc2U7XG5cdFx0XHRmb3IgKGNvbnN0IG1BZ2dyZWdhdGlvbnNLZXkgaW4gY29udHJvbC5tQWdncmVnYXRpb25zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoIUFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSBudWxsICYmXG5cdFx0XHRcdFx0XHRjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0gIT09IHVuZGVmaW5lZCkgfHxcblx0XHRcdFx0XHQoQXJyYXkuaXNBcnJheShjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0pICYmIGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XS5sZW5ndGggPiAwKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRoYXNBZ2dyZWdhdGlvbiA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXS0tO1xuXHRcdFx0aWYgKGhhc0FnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBgPC8ke25hbWVzcGFjZUFsaWFzfToke25hbWV9PmA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYC8+YDtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG1pZGRsZTogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0bGV0IGlkID0gY29udHJvbC5nZXRJZCgpO1xuXHRcdFx0aWQgPSB0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIgPyByZW1vdmVEeW5hbWljSWQoaWQpIDogaWQ7XG5cdFx0XHRsZXQgZGF0YSA9IFwiXCI7XG5cdFx0XHRpZiAoIU1hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGlkKSkge1xuXHRcdFx0XHRkYXRhID0gYGlkPVwiJHtpZH1cImA7XG5cdFx0XHR9XG5cdFx0XHRsZXQga2V5cyA9IE9iamVjdC5rZXlzKGNvbnRyb2wubVByb3BlcnRpZXMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BOYW1lKSA9PiBwcm9wTmFtZSAhPT0gXCJpZFwiKVxuXHRcdFx0XHQuY29uY2F0KE9iamVjdC5rZXlzKGNvbnRyb2wubUJpbmRpbmdJbmZvcykpXG5cdFx0XHRcdC5jb25jYXQoT2JqZWN0LmtleXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldEFsbEFzc29jaWF0aW9ucygpKSlcblx0XHRcdFx0LmNvbmNhdChPYmplY3Qua2V5cyhjb250cm9sLm1FdmVudFJlZ2lzdHJ5KSlcblx0XHRcdFx0LmZpbHRlcigocHJvcE5hbWUpID0+ICFpZ25vcmVLZXlzLmluY2x1ZGVzKHByb3BOYW1lKSk7XG5cdFx0XHRrZXlzID0ga2V5cy5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXHRcdFx0Y29uc3QgdW5pcXVlS2V5cyA9IG5ldyBTZXQoa2V5cyk7XG5cdFx0XHRrZXlzID0gQXJyYXkuZnJvbSh1bmlxdWVLZXlzKTtcblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgb2Yga2V5cykge1xuXHRcdFx0XHRpZiAoIXByZWZlclZhbHVlICYmIGNvbnRyb2wubUJpbmRpbmdJbmZvcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nRGV0YWlsID0geyAuLi5jb250cm9sLm1CaW5kaW5nSW5mb3Nbb0NvbnRyb2xLZXldIH07XG5cdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwuYmluZGluZ1N0cmluZykge1xuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIodGFiQ291bnQpfSR7b0NvbnRyb2xLZXl9PVwiJHtiaW5kaW5nRGV0YWlsLmJpbmRpbmdTdHJpbmcucmVwbGFjZShcIj5cIiwgXCImZ3Q7XCIpfVwiYDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZT8ub091dHB1dEZvcm1hdCkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50eXBlLm9PdXRwdXRGb3JtYXQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLmJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwuYmluZGluZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLnRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLnRlbXBsYXRlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIodGFiQ291bnQpfSR7b0NvbnRyb2xLZXl9PScke0pTT04uc3RyaW5naWZ5KGJpbmRpbmdEZXRhaWwpfSdgO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLm1Qcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSAmJiBjb250cm9sLm1Qcm9wZXJ0aWVzW29Db250cm9sS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5VmFsdWUgPSBjb250cm9sLm1Qcm9wZXJ0aWVzW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSByZW1vdmVEeW5hbWljSWQocHJvcGVydHlWYWx1ZSkucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID1cblx0XHRcdFx0XHRcdFx0dHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eVZhbHVlKS5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKSA6IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0Ly8gU3RyaW5naWZ5IG1heSBmYWlsIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGJ1dCBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtvQ29udHJvbEtleX09XCIke3Byb3BlcnR5VmFsdWV9XCJgO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuZ2V0QXNzb2NpYXRpb24ob0NvbnRyb2xLZXksIG51bGwpKSB7XG5cdFx0XHRcdFx0bGV0IGFzc29jaWF0aW9uVmFsdWUgPSBjb250cm9sLmdldEFzc29jaWF0aW9uKG9Db250cm9sS2V5LCBudWxsKTtcblx0XHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoYXNzb2NpYXRpb25WYWx1ZSkpIHtcblx0XHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBbYXNzb2NpYXRpb25WYWx1ZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBhc3NvY2lhdGlvblZhbHVlLm1hcCgoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudCA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdFx0XHQ/IHJlbW92ZUR5bmFtaWNJZChhc3NvY2lhdGlvblZhbHVlRWxlbWVudClcblx0XHRcdFx0XHRcdFx0OiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudDtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtvQ29udHJvbEtleX09XCIkeyhhc3NvY2lhdGlvblZhbHVlPy5qb2luPy4oXCIsXCIpID8/IGFzc29jaWF0aW9uVmFsdWUpIHx8IHVuZGVmaW5lZH1cImA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tRXZlbnRSZWdpc3RyeS5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRpZiAoY29udHJvbC5tRXZlbnRSZWdpc3RyeVtvQ29udHJvbEtleV1bMF0/LmZGdW5jdGlvbj8ubmFtZSkge1xuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIodGFiQ291bnQpfSAke29Db250cm9sS2V5fT1cIiR7Y29udHJvbC5tRXZlbnRSZWdpc3RyeVtvQ29udHJvbEtleV1bMF0/LmZGdW5jdGlvbj8ubmFtZX1cImA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtvQ29udHJvbEtleX09XCJzb21lRXZlbnRIYW5kbGVyXCJgO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHNob3dDdXN0b21TdHlsZUNsYXNzZXMgJiYgY29udHJvbC5hQ3VzdG9tU3R5bGVDbGFzc2VzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gY3VzdG9tU3R5bGVDbGFzc2VzIDogJHtjb250cm9sLmFDdXN0b21TdHlsZUNsYXNzZXMuam9pbihcIiwgXCIpfWA7XG5cdFx0XHR9XG5cdFx0XHRkYXRhICs9IGBcXG5gO1xuXHRcdFx0bGV0IGhhc0FnZ3JlZ2F0aW9uID0gZmFsc2U7XG5cdFx0XHRmb3IgKGNvbnN0IG1BZ2dyZWdhdGlvbnNLZXkgaW4gY29udHJvbC5tQWdncmVnYXRpb25zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoIUFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSBudWxsICYmXG5cdFx0XHRcdFx0XHRjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0gIT09IHVuZGVmaW5lZCkgfHxcblx0XHRcdFx0XHQoQXJyYXkuaXNBcnJheShjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0pICYmIGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XS5sZW5ndGggPiAwKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRoYXNBZ2dyZWdhdGlvbiA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChoYXNBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRkYXRhICs9IFwiPlwiO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fSxcblx0XHRzdGFydEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0bGV0IG91dCA9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9PCR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PmA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXHRcdFx0b3V0ICs9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9YDtcblx0XHRcdHJldHVybiBvdXQ7XG5cdFx0fSxcblx0XHRlbmRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0dGFiQ291bnQtLTtcblx0XHRcdGNvbnN0IG5hbWVzcGFjZUFsaWFzID0gZ2V0TmFtZXNwYWNlQWxpYXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSk7XG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX08LyR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PlxcbmA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX08LyR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PlxcbmA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRsZXQgb3V0WE1MO1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0b3V0WE1MID0gY29udHJvbFRvU2VyaWFsaXplLm1hcCgoY29udHJvbFRvUmVuZGVyOiBNYW5hZ2VkT2JqZWN0KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvUmVuZGVyLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0WE1MID0gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvU2VyaWFsaXplLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTChgPHJvb3Q+JHtvdXRYTUx9PC9yb290PmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXdhaXRlcigpIHtcblx0bGV0IGZuUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdH0pO1xuXHRyZXR1cm4geyBwcm9taXNlOiBteVByb21pc2UsIHJlc29sdmU6IGZuUmVzb2x2ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNb2NrRnJhZ21lbnRzKC4uLmZyYWdtZW50czogTW9ja0ZyYWdtZW50W10pOiBqZXN0LlNweUluc3RhbmNlIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb3JpZ2luYWxMb2FkVGVtcGxhdGUgPSAoWE1MVGVtcGxhdGVQcm9jZXNzb3IgYXMgYW55KS5sb2FkVGVtcGxhdGVQcm9taXNlO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRjb25zdCBsb2FkVGVtcGxhdGVTdHViID0gamVzdC5zcHlPbihYTUxUZW1wbGF0ZVByb2Nlc3NvciBhcyBhbnksIFwibG9hZFRlbXBsYXRlUHJvbWlzZVwiKTtcblx0bG9hZFRlbXBsYXRlU3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCh0ZW1wbGF0ZU5hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0aWYgKGZyYWdtZW50Lm5hbWUgPT09IHRlbXBsYXRlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VYTUxTdHJpbmcoZnJhZ21lbnQuY29udGVudClbMF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbExvYWRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUsIGV4dGVuc2lvbik7XG5cdH0pIGFzICgoKSA9PiBFbGVtZW50KSB8IHVuZGVmaW5lZCk7XG5cdHJldHVybiBsb2FkVGVtcGxhdGVTdHViO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gYXBwQ29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zLmNkc0ZpbGUgVGhlIHBhdGggdG8gdGhlIENEUyBmaWxlIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMubWFpbkNvbnRleHRQYXRoIFRoZSBtYWluIGNvbnRleHQgcGF0aCB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLnBhZ2VDb250ZW50IFRoZSBwYWdlIGNvbnRlbnQgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5jb250ZW50IFRoZSBjb250ZW50IHRvIHVzZSBmb3IgdGhlIGFwcCBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLmNvbXBvbmVudElkXG4gKiBAcGFyYW0gb3B0aW9ucy5tYW5pZmVzdFNldHRpbmdzXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSB2aWV3TGV2ZWwgVGhlIHZpZXcgbGV2ZWwgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcmV0dXJucyBUaGUgYXBwY29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB0byB1c2UgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVBcHBDb21wb25lbnQoXG5cdG9wdGlvbnM/OiB7XG5cdFx0Y2RzRmlsZT86IHN0cmluZztcblx0XHRjb21wb25lbnRJZD86IHN0cmluZztcblx0XHRtYWluQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdFx0cGFnZUNvbnRlbnQ/OiBGdW5jdGlvbjtcblx0XHRtYW5pZmVzdFNldHRpbmdzPzogUGFydGlhbDxMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzPjtcblx0XHRmZU1hbmlmZXN0U2V0dGluZ3M/OiBQYXJ0aWFsPE1hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXT47XG5cdFx0Y29udGVudD86IFBhcnRpYWw8TGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3NbXCJjb250ZW50XCJdIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3NbXCJjb250ZW50XCJdPjtcblx0XHRndWlkPzogc3RyaW5nO1xuXHR9LFxuXHRuYW1lPzogc3RyaW5nLFxuXHR2aWV3TGV2ZWw/OiBudW1iZXJcbik6IFByb21pc2U8eyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgdGVtcGxhdGVDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50IH0+IHtcblx0amVzdC5zcHlPbihPRGF0YU1vZGVsLnByb3RvdHlwZSwgXCJzZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyXCIpLm1vY2tSZXR1cm5WYWx1ZSh1bmRlZmluZWQpO1xuXHRsZXQgY2RzRmlsZSA9IG9wdGlvbnM/LmNkc0ZpbGU7XG5cdGlmICghY2RzRmlsZSkge1xuXHRcdGNkc0ZpbGUgPSBjb21waWxlQ0RTKHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi9kYXRhL1Byb2R1Y3RzLmNkc1wiKSk7XG5cdH1cblx0Y29uc3QgZ3VpZCA9IG9wdGlvbnM/Lmd1aWQgPz8gdWlkKCk7XG5cdGNvbnN0IGlkID0gb3B0aW9ucz8uY29tcG9uZW50SWQgPz8gYHNhcC5mZS50ZXN0LiR7Z3VpZH1gO1xuXHRjb25zdCBjZHNDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGNkc0ZpbGUpLnRvU3RyaW5nKCk7XG5cdHdpbmRvdy5qZXN0VUk1Lm1vY2tVcmwoYC9zYXAvZmUvY29yZS9tb2NrLyR7Z3VpZH0vJG1ldGFkYXRhP3NhcC1sYW5ndWFnZT1FTmAsIGNkc0NvbnRlbnQpO1xuXHRpZiAoIW9wdGlvbnM/LnBhZ2VDb250ZW50KSB7XG5cdFx0amVzdC5zcHlPbihQYWdlQ29udHJvbGxlci5wcm90b3R5cGUsIFwiX29uSW50ZXJuYWxBZnRlckJpbmRpbmdcIikubW9ja0ltcGxlbWVudGF0aW9uKGplc3QuZm4oKSk7XG5cdH1cblx0Y2xhc3MgRGVmYXVsdFBhZ2VDb250ZW50IGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRcdHJlbmRlcigpIHtcblx0XHRcdHJldHVybiA8UGFnZT48L1BhZ2U+O1xuXHRcdH1cblx0fVxuXHRzYXAudWkuZGVmaW5lKGBzYXAvZmUvdGVzdC8ke2d1aWR9L0NvbXBvbmVudGAsIFtcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiXSwgZnVuY3Rpb24gKF9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdFwidXNlIHN0cmljdFwiO1xuXG5cdFx0cmV0dXJuIEFwcENvbXBvbmVudC5leHRlbmQoYHNhcC5mZS50ZXN0LiR7Z3VpZH0uQ29tcG9uZW50YCwge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0bWFuaWZlc3Q6IHtcblx0XHRcdFx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0XHRcdFx0aWQ6IGB0ZXN0JHtndWlkfWAsXG5cdFx0XHRcdFx0XHR0aXRsZTogXCJBcHAgVGl0bGVcIixcblx0XHRcdFx0XHRcdGRhdGFTb3VyY2VzOiB7XG5cdFx0XHRcdFx0XHRcdG1haW5TZXJ2aWNlOiB7XG5cdFx0XHRcdFx0XHRcdFx0dXJpOiBgL3NhcC9mZS9jb3JlL21vY2svJHtndWlkfS9gLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiT0RhdGFcIixcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0b2RhdGFWZXJzaW9uOiBcIjQuMFwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcInNhcC51aTVcIjoge1xuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdFwiXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRkYXRhU291cmNlOiBcIm1haW5TZXJ2aWNlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3M6IHt9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldHM6IHtcblx0XHRcdFx0XHRcdFx0XHREZWZhdWx0OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbXBvbmVudFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogbmFtZSA/PyBcInNhcC5mZS5jb3JlLmZwbVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ6IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmlld0xldmVsOiB2aWV3TGV2ZWwsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Li4uKG9wdGlvbnM/Lm1hbmlmZXN0U2V0dGluZ3MgPz8ge30pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvcHRpb25zPy5tYWluQ29udGV4dFBhdGggPz8gXCIvUHJvZHVjdHNcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aWV3VHlwZTogXCJKU1hcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aWV3Q29udGVudDogb3B0aW9ucz8ucGFnZUNvbnRlbnQgPz8gRGVmYXVsdFBhZ2VDb250ZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IG9wdGlvbnM/LmNvbnRlbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cm91dGVzOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogXCI6P3F1ZXJ5OlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXQ6IFwiRGVmYXVsdFwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcInNhcC5mZVwiOiBvcHRpb25zPy5mZU1hbmlmZXN0U2V0dGluZ3MgPz8ge31cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblx0Y29uc3QgbW9ja0FwcENvbXBvbmVudCA9IChhd2FpdCBDb21wb25lbnQuY3JlYXRlKHsgbmFtZTogYHNhcC5mZS50ZXN0LiR7Z3VpZH1gLCBpZDogaWQgfSkpIGFzIEFwcENvbXBvbmVudDtcblxuXHRhd2FpdCBtb2NrQXBwQ29tcG9uZW50LmluaXRpYWxpemVkO1xuXHRjb25zdCB2ID0gYXdhaXQgKG1vY2tBcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0VGFyZ2V0KFwiRGVmYXVsdFwiKSBhcyB7IGxvYWQ/OiBGdW5jdGlvbiB9KS5sb2FkPy4oKTtcblx0cmV0dXJuIHsgYXBwQ29tcG9uZW50OiBtb2NrQXBwQ29tcG9uZW50LCB0ZW1wbGF0ZUNvbXBvbmVudDogdi5vYmplY3QgfTtcbn1cblxuLyoqXG4gKiBGaW5kIGFuIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc2VsZWN0b3IuXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIHNlbGVjdG9yXG4gKiBAcmV0dXJucyBUaGUgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yIG9yIHVuZGVmaW5lZCBpZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWxlbWVudChjb2xsZWN0aW9uOiBIVE1MQ29sbGVjdGlvbiwgc2VsZWN0b3I6IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbik6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGNvbGxlY3Rpb24uaXRlbShpKSBhcyBIVE1MRWxlbWVudDtcblx0XHRpZiAoc2VsZWN0b3IoZWxlbWVudCkpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGFuIGV2ZW50IHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nLlxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEBwYXJhbSBldmVudE5hbWVcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGV2ZW50IGlzIHJlY2VpdmVkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yRXZlbnQ8VCBleHRlbmRzIHt9Pihjb250cm9sOiBFdmVudFByb3ZpZGVyLCBldmVudE5hbWU6IHN0cmluZyk6IFByb21pc2U8VUk1RXZlbnQ8VD4+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Y29udHJvbC5hdHRhY2hFdmVudE9uY2UoZXZlbnROYW1lLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRyZXNvbHZlKGV2ZW50IGFzIHVua25vd24gYXMgVUk1RXZlbnQ8VD4pO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUZWxsIHRoZSBiaW5kaW5nIHBhcnNlciB0byBrZWVwIHRoZSBiaW5kaW5nIHN0cmluZ3MgZm9yIHRlc3RpbmcuXG4gKiBAcGFyYW0gZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcEJpbmRpbmdTdHJpbmdGb3JUZXN0KGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0QmluZGluZ1BhcnNlci5fa2VlcEJpbmRpbmdTdHJpbmdzID0gZW5hYmxlZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGF5Rm9yKGRlbGF5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0c2V0VGltZW91dChyZXNvbHZlLCBkZWxheSk7XG5cdH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0VBMEVBQSxHQUFHLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEVBQVMsa0NBQWtDLENBQUM7RUFDMURDLElBQUksQ0FBQ0MsVUFBVSxDQUFDLEtBQUssQ0FBQztFQUV0QixNQUFNQyxZQUFvQyxHQUFHO0lBQzVDQyxLQUFLLEVBQUUsZUFBZTtJQUN0QkMsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQ0MsTUFBTSxFQUFFLGVBQWU7SUFDdkJDLElBQUksRUFB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
|
|
1245
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2ciLCJzZXRMZXZlbCIsImplc3QiLCJzZXRUaW1lb3V0IiwibmFtZVNwYWNlTWFwIiwibWFjcm8iLCJtYWNyb1NoYXJlIiwibWFjcm9zIiwiZmVCQiIsIm1hY3JvRmllbGQiLCJtYWNyb2RhdGEiLCJsb2ciLCJjdXN0b21EYXRhIiwiY29udHJvbCIsImNvbnRyb2xzIiwiY29yZSIsImR0IiwibSIsImYiLCJmbCIsImludGVybmFsTWFjcm8iLCJtZGMiLCJhY3Rpb250b29sYmFyIiwibWRjRmllbGQiLCJtZGNUYWJsZSIsInUiLCJ1eGFwIiwibWFjcm9NaWNyb0NoYXJ0IiwibWljcm9DaGFydCIsIm1hY3JvVGFibGUiLCJtZGN2YyIsIm1kY3YiLCJ2YWx1ZUhlbHAiLCJjb250ZW50U3dpdGNoZXIiLCJmaWx0ZXJCYXIiLCJkcmFmdEluZGljYXRvciIsInZpc3VhbEZpbHRlciIsImZpZWxkaGVscCIsInJldmVzZU5hbWVzcGFjZU1hcCIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJyZXZlcnNlTWFwIiwiY3VycmVudE5hbWUiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlIiwiY29tcHV0ZUZpZWxkR3JvdXBJZHMiLCJfZ2V0VGVtcGxhdGVkU2VsZWN0b3IiLCJ4bWxkb20iLCJzZWxlY3RvciIsInJvb3RQYXRoIiwibm9kZU5hbWUiLCJzdGFydHNXaXRoIiwiX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MiLCJzTWV0YWRhdGFVcmwiLCJtQmluZGluZ0NvbnRleHRzIiwibU1vZGVscyIsImZha2VTaWRlRWZmZWN0U2VydmljZSIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnbiIsImNvbnZlcnRlckNvbnRleHQiLCJUZW1wbGF0ZU1vZGVsIiwiZm9yRWFjaCIsInNNb2RlbE5hbWUiLCJpc1RlbXBsYXRlTW9kZWwiLCJkYXRhIiwic2V0dGluZ3MiLCJtb2RlbHMiLCJtZXRhTW9kZWwiLCJiaW5kaW5nQ29udGV4dHMiLCJhcHBDb21wb25lbnQiLCJnZXRSb3V0aW5nU2VydmljZSIsIl9nZXRUYXJnZXRJbmZvcm1hdGlvbiIsImZuIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0RGlhZ25vc3RpY3MiLCJ1bmRlZmluZWQiLCJnZXRTaGVsbFNlcnZpY2VzIiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm1vY2tSZXR1cm5WYWx1ZSIsInNLZXkiLCJleHBlY3QiLCJnZXRPYmplY3QiLCJ0b0JlRGVmaW5lZCIsIm9Nb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiX2xvYWRSZXNvdXJjZVZpZXciLCJ2aWV3TmFtZSIsIm5hbWUiLCJyZXBsYWNlIiwidmlldyIsIkxvYWRlckV4dGVuc2lvbnMiLCJsb2FkUmVzb3VyY2UiLCJkb2N1bWVudEVsZW1lbnQiLCJydW5YUGF0aFF1ZXJ5IiwiZXh0ZW5kIiwidG9IYXZlQ29udHJvbCIsIm5vZGVzIiwibWVzc2FnZSIsIm91dHB1dFhtbCIsInNlcmlhbGl6ZVhNTCIsInBhc3MiLCJsZW5ndGgiLCJ0b05vdEhhdmVDb250cm9sIiwidG9IYXZlVGVtcGxhdGluZ0Vycm9ycyIsInhtbCIsInhtbFRleHQiLCJiYXNlNjRFbnRyaWVzIiwibWF0Y2giLCJlcnJvck1lc3NhZ2VzIiwibWFwIiwiYXRvYiIsInNsaWNlIiwiam9pbiIsIl9leHBvcnRzIiwiZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCIsInhtbFN0cmluZyIsIkFycmF5IiwiaXNBcnJheSIsImZvcm1hdFhNTCIsImdldENvbnRyb2xBdHRyaWJ1dGUiLCJjb250cm9sU2VsZWN0b3IiLCJhdHRyaWJ1dGVOYW1lIiwieG1sRG9tIiwib3B0aW9ucyIsInNlcmlhbGl6ZXIiLCJ3aW5kb3ciLCJYTUxTZXJpYWxpemVyIiwibm9kZSIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiU1RBUlQiLCJFTkQiLCJsaW5lcyIsImN1cnJlbnRMaW5lIiwibGV2ZWwiLCJhdHRyaWJ1dGVzIiwibmV3bGluZSIsInB1c2giLCJyZXBlYXQiLCJhcHBlbmRBdHRyaWJ1dGVzIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImluY2x1ZGVzIiwiYXR0cmlidXRlIiwidmFsdWUiLCJhcHBlbmQiLCJwYXJzZXIiLCJyZWFkIiwiY3JlYXRlUGFyc2VyIiwib25PcGVuVGFnU3RhcnQiLCJvbk9wZW5UYWdOYW1lIiwib25BdHRyTmFtZSIsInVuc2hpZnQiLCJvbkF0dHJWYWx1ZSIsImtlZXBEeW5hbWljSWRzIiwicmVtb3ZlRHluYW1pY0lkIiwib25PcGVuVGFnRW5kIiwic2VsZkNsb3NlZCIsIm9uQ2xvc2VUYWdTdGFydCIsIm9uQ2xvc2VUYWdOYW1lIiwib25DbG9zZVRhZ0VuZCIsInBhcnNlIiwidHJpbSIsImNvbXBpbGVDRFMiLCJjZHNVcmwiLCJhcmd1bWVudHMiLCJjZHNTdHJpbmciLCJmcyIsInJlYWRGaWxlU3luYyIsImVkbXhDb250ZW50IiwiY2RzMmVkbXgiLCJkaXIiLCJwYXRoIiwicmVzb2x2ZSIsImFsbE9wdGlvbnMiLCJlbnRyaWVzIiwiZWRteEZpbGVOYW1lIiwiZmlsZW5hbWUiLCJfcmVmIiwib3B0aW9uS2V5Iiwib3B0aW9uVmFsdWUiLCJ0b1N0cmluZyIsImJhc2VuYW1lIiwiZWRteEZpbGVQYXRoIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwid3JpdGVGaWxlU3luYyIsImNkcyIsInNlcnZpY2UiLCJzb3VyY2VzIiwicmVxdWlyZSIsImNzbiIsImNvbXBpbGVyIiwiY29tcGlsZVNvdXJjZXMiLCJlZG14T3B0aW9ucyIsIm9kYXRhRm9yZWlnbktleXMiLCJvZGF0YUZvcm1hdCIsIm9kYXRhQ29udGFpbm1lbnQiLCJlZG14IiwidG8iLCJFcnJvciIsImdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UiLCJjbGFzc05hbWVPRGF0YU1vZGVsIiwic2NvcGVPYmplY3QiLCJnZXRNb2RlbCIsImlzQSIsImdldFNlcnZpY2VVcmwiLCJnZXRTZXJ2aWNlIiwiZ2V0Q2FwYWJpbGl0aWVzIiwic2VydmljZUluc3RhbmNlIiwiU2lkZUVmZmVjdHNGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJzY29wZVR5cGUiLCJnZXRJbnRlcmZhY2UiLCJnZXRGYWtlRGlhZ25vc3RpY3MiLCJpc3N1ZXMiLCJhZGRJc3N1ZSIsImlzc3VlQ2F0ZWdvcnkiLCJpc3N1ZVNldmVyaXR5IiwiZGV0YWlscyIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwibWFuaWZlc3RTZXR0aW5ncyIsImNvbnZlcnRlZFR5cGVzIiwiY29udmVydFR5cGVzIiwiZGF0YU1vZGVsUGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZW50aXR5U2V0IiwiQ29udmVydGVyQ29udGV4dCIsIk1hbmlmZXN0V3JhcHBlciIsIm1ldGFNb2RlbENhY2hlIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwiX3JlcXVlc3RBbm5vdGF0aW9uQ2hhbmdlcyIsImZldGNoRW50aXR5Q29udGFpbmVyIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwicHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVNldCIsInRhcmdldEVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwiY29udGV4dExvY2F0aW9uIiwiZXZhbHVhdGVCaW5kaW5nIiwiYmluZGluZ1N0cmluZyIsImJpbmRpbmdFbGVtZW50IiwiQmluZGluZ0luZm8iLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsIl9mb3JtYXR0ZXJzIiwiVmFsdWVGb3JtYXR0ZXIiLCJ0ZXh0IiwiSW52aXNpYmxlVGV4dCIsImJpbmRQcm9wZXJ0eSIsImRlZmF1bHRNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwic2V0QmluZGluZ0NvbnRleHQiLCJjb250ZW50IiwibW9kZWwiLCJnZXRUZXh0IiwiVEVTVFZJRVdJRCIsImFwcGx5RmxleENoYW5nZXMiLCJmbGV4Q2hhbmdlcyIsInJlc3VsdFhNTCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpZCIsImNoYW5nZXMiLCJjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QiLCJhcHBJZCIsIm9NYW5pZmVzdCIsInR5cGUiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJvQXBwQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50RGF0YSIsImdldE1hbmlmZXN0T2JqZWN0IiwiZ2V0RW50cnkiLCJnZXRMb2NhbElkIiwic0lkIiwic3B5T24iLCJBcHBTdG9yYWdlIiwiUHJvbWlzZSIsIkxvYWRlciIsIkNvbXBvbmVudCIsIlV0aWxzIiwiRmxleFN0YXRlIiwiaW5pdGlhbGl6ZSIsImNvbXBvbmVudElkIiwiWG1sUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImNoYW5nZXNBcHBsaWVkIiwiZ2V0Q2hhbmdlc0Zyb21YTUwiLCJ0b0JlIiwidmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzIiwiZmxhdE1hcCIsImUiLCJmaWx0ZXIiLCJhdHRyIiwiZ2V0VGVtcGxhdGluZ1Jlc3VsdCIsInhtbElucHV0IiwiY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwiLCJ0ZW1wbGF0ZWRYbWwiLCJET01QYXJzZXIiLCJ4bWxEb2MiLCJwYXJzZUZyb21TdHJpbmciLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJYTUxQcmVwcm9jZXNzb3IiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImdldFRlbXBsYXRlZFhNTCIsImpzeCIsImRlZmluZVhNTE5hbWVzcGFjZU1hcCIsInRlbXBsYXRlZFhNTCIsInNlcmlhbGllZFhNTCIsIm5vdCIsInByb2Nlc3NWaWV3Iiwib1ZpZXdEb2N1bWVudCIsIm9QcmVwcm9jZXNzZWRWaWV3IiwiYXNFbGVtZW50IiwiYXNTdHJpbmciLCJvdXRlckhUTUwiLCJwcm9jZXNzRnJhZ21lbnQiLCJ0ZXN0RGF0YSIsImlucHV0WG1sIiwiaW5wdXREb2MiLCJqc29uTW9kZWwiLCJzZXREYXRhIiwicmVzdWx0RG9jIiwiZnJhZ21lbnRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJmcmFnbWVudCIsImlubmVySFRNTCIsInhtbFJlc3VsdCIsImNoaWxkcmVuIiwiZ2V0VGFiIiwidGFiQ291bnQiLCJ0b0FkZCIsInRhYiIsImkiLCJVSUQiLCJDT05UUk9MSUQiLCJnZXRQcm9wZXJ0eSIsInByb3BlcnR5S2V5IiwicHJvcGVydHlWYWx1ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRCaW5kaW5nSW5mbyIsImJpbmRpbmdEZXRhaWwiLCJvT3V0cHV0Rm9ybWF0IiwiYmluZGluZyIsInNlcmlhbGl6ZVByb3BlcnRpZXMiLCJpZ25vcmVLZXlzIiwicHJvcGVydGllcyIsImdldE1ldGFkYXRhIiwiZ2V0QWxsUHJvcGVydGllcyIsImluaGVyaXRlZFByb3BlcnRpZXMiLCJpc1Byb3BlcnR5SW5pdGlhbCIsImlzQm91bmQiLCJpZ25vcmVCaW5kaW5nSW5mb0tleXMiLCJzZXJpYWxpemVBc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvbktleXMiLCJnZXRBbGxBc3NvY2lhdGlvbnMiLCJrZXkiLCJhc3NvY2lhdGlvbktleSIsImFzc29jaWF0aW9uVmFsdWUiLCJnZXRBc3NvY2lhdGlvbiIsImFzc29jaWF0aW9uVmFsdWVFbGVtZW50IiwiTWFuYWdlZE9iamVjdE1ldGFkYXRhIiwiaXNHZW5lcmF0ZWRJZCIsInNlcmlhbGl6ZUV2ZW50cyIsImludGVybmFsVUk1RXZlbnRzIiwiZXZlbnRJZHMiLCJnZXRBbGxFdmVudHMiLCJjb25jYXQiLCJldmVudEtleSIsImhhc0xpc3RlbmVycyIsInNlcmlhbGl6ZUNvbnRyb2wiLCJjb250cm9sVG9TZXJpYWxpemUiLCJzZXJpYWxpemVEZWxlZ2F0ZSIsInN0YXJ0Iiwic0FnZ3JlZ2F0aW9uTmFtZSIsImdldEN1c3RvbURhdGEiLCJnZXRLZXkiLCJyZW1vdmVBbGxDdXN0b21EYXRhIiwiY2QiLCJhZGRDdXN0b21EYXRhIiwiY29udHJvbERldGFpbCIsImdldFBhcmVudCIsImluZGV4SW5QYXJlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImluZGV4T2YiLCJnZXROYW1lIiwiZW5kIiwibWlkZGxlIiwiZ2V0SWQiLCJtQWdncmVnYXRpb25zIiwidG9vbHRpcCIsInNob3dDdXN0b21TdHlsZUNsYXNzZXMiLCJhQ3VzdG9tU3R5bGVDbGFzc2VzIiwic3RhcnRBZ2dyZWdhdGlvbiIsInNOYW1lIiwib3V0IiwibUJpbmRpbmdJbmZvcyIsImVuZEFnZ3JlZ2F0aW9uIiwiY29udHJvbFRvUmVuZGVyIiwiU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZUNvbnRyb2xBc1hNTCIsInByZWZlclZhbHVlIiwiZGVmaW5lZE5hbWVzcGFjZXMiLCJnZXROYW1lc3BhY2VBbGlhcyIsImNsYXNzTmFtZSIsIm5hbWVzU3BsaXQiLCJzcGxpdCIsIm5hbWVzcGFjZSIsIm5hbWVzcGFjZUFsaWFzIiwibmFtZUZ1bGwiLCJoYXNBZ2dyZWdhdGlvbiIsIm1BZ2dyZWdhdGlvbnNLZXkiLCJtUHJvcGVydGllcyIsInByb3BOYW1lIiwibUV2ZW50UmVnaXN0cnkiLCJ1bmlxdWVLZXlzIiwiU2V0IiwiZnJvbSIsIm9Db250cm9sS2V5IiwidGVtcGxhdGUiLCJmRnVuY3Rpb24iLCJvdXRYTUwiLCJjcmVhdGVBd2FpdGVyIiwiZm5SZXNvbHZlIiwibXlQcm9taXNlIiwicHJvbWlzZSIsInJlZ2lzdGVyTW9ja0ZyYWdtZW50cyIsIl9sZW4yIiwiX2tleTIiLCJvcmlnaW5hbExvYWRUZW1wbGF0ZSIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlUHJvbWlzZSIsImxvYWRUZW1wbGF0ZVN0dWIiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJ0ZW1wbGF0ZU5hbWUiLCJleHRlbnNpb24iLCJwYXJzZVhNTFN0cmluZyIsImluaXRpYWxpemVBcHBDb21wb25lbnQiLCJ2aWV3TGV2ZWwiLCJPRGF0YU1vZGVsIiwicHJvdG90eXBlIiwiY2RzRmlsZSIsIl9fZGlybmFtZSIsImd1aWQiLCJ1aWQiLCJjZHNDb250ZW50IiwiamVzdFVJNSIsIm1vY2tVcmwiLCJwYWdlQ29udGVudCIsIlBhZ2VDb250cm9sbGVyIiwiRGVmYXVsdFBhZ2VDb250ZW50IiwiX1BhZ2VDb250cm9sbGVyIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJyZW5kZXIiLCJfanN4IiwiUGFnZSIsInNhcCIsInVpIiwiZGVmaW5lIiwiX0FwcENvbXBvbmVudCIsIkFwcENvbXBvbmVudCIsIm1ldGFkYXRhIiwibWFuaWZlc3QiLCJ0aXRsZSIsImRhdGFTb3VyY2VzIiwibWFpblNlcnZpY2UiLCJ1cmkiLCJvZGF0YVZlcnNpb24iLCJkYXRhU291cmNlIiwicm91dGluZyIsInRhcmdldHMiLCJEZWZhdWx0IiwibWFpbkNvbnRleHRQYXRoIiwidmlld1R5cGUiLCJ2aWV3Q29udGVudCIsInJvdXRlcyIsInBhdHRlcm4iLCJ0YXJnZXQiLCJmZU1hbmlmZXN0U2V0dGluZ3MiLCJFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UiLCJEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJtb2NrQXBwQ29tcG9uZW50IiwiaW5pdGlhbGl6ZWQiLCJ2IiwiZ2V0Um91dGVyIiwiZ2V0VGFyZ2V0IiwibG9hZCIsInRlbXBsYXRlQ29tcG9uZW50Iiwib2JqZWN0IiwiZmluZEVsZW1lbnQiLCJjb2xsZWN0aW9uIiwiZWxlbWVudCIsIml0ZW0iLCJ3YWl0Rm9yRXZlbnQiLCJldmVudE5hbWUiLCJhdHRhY2hFdmVudE9uY2UiLCJldmVudCIsImtlZXBCaW5kaW5nU3RyaW5nRm9yVGVzdCIsImVuYWJsZWQiLCJCaW5kaW5nUGFyc2VyIiwiX2tlZXBCaW5kaW5nU3RyaW5ncyIsImRlbGF5Rm9yIiwiZGVsYXkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFueUFubm90YXRpb24sIENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB0eXBlIHsgUmFuZ2UsIFJhbmdlcyB9IGZyb20gXCJodG1sanMtcGFyc2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzZXIgfSBmcm9tIFwiaHRtbGpzLXBhcnNlclwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgTG9hZGVyRXh0ZW5zaW9ucyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9Mb2FkZXJFeHRlbnNpb25zXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB7IHBhcnNlWE1MU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJRGlhZ25vc3RpY3MsIFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IFZhbHVlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMsIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFNpZGVFZmZlY3RzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvdGVzdC9VSTVNb2NrSGVscGVyXCI7XG5pbXBvcnQgUGFnZSBmcm9tIFwic2FwL20vUGFnZVwiO1xuaW1wb3J0IEJpbmRpbmdJbmZvIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbywgUHJvcGVydHlCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0TWV0YWRhdGFcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RDb250ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFNlcmlhbGl6ZXIgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvc2VyaWFsaXplci9TZXJpYWxpemVyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcInNhcC91aS9mbC9VdGlsc1wiO1xuaW1wb3J0IEZsZXhTdGF0ZSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9mbGV4U3RhdGUvRmxleFN0YXRlXCI7XG5pbXBvcnQgTG9hZGVyIGZyb20gXCJzYXAvdWkvZmwvaW5pdGlhbC9faW50ZXJuYWwvTG9hZGVyXCI7XG5pbXBvcnQgQXBwU3RvcmFnZSBmcm9tIFwic2FwL3VpL2ZsL2luaXRpYWwvX2ludGVybmFsL1N0b3JhZ2VcIjtcbmltcG9ydCBYbWxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9mbC9pbml0aWFsL19pbnRlcm5hbC9wcmVwcm9jZXNzb3JzL1htbFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01ldGFNb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IHhwYXRoIGZyb20gXCJ4cGF0aFwiO1xuaW1wb3J0IHsgY3JlYXRlRmxleGliaWxpdHlDaGFuZ2VzT2JqZWN0IH0gZnJvbSBcIi4vSmVzdEZsZXhpYmlsaXR5SGVscGVyXCI7XG5cbnR5cGUgUHJlUHJvY2Vzc29yU2V0dGluZ3NUeXBlID0ge1xuXHRtb2RlbHM6IHtcblx0XHRbbmFtZTogc3RyaW5nXTogSlNPTk1vZGVsIHwgT0RhdGFNZXRhTW9kZWw7XG5cdH07XG5cdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFtuYW1lOiBzdHJpbmddOiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHR9O1xufTtcbnR5cGUgTW9ja0ZyYWdtZW50ID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGNvbnRlbnQ6IHN0cmluZztcbn07XG5cbnR5cGUgSmVzdFRlbXBsYXRlZFZpZXcgPSB7XG5cdGFzRWxlbWVudDogRWxlbWVudCB8IHVuZGVmaW5lZDtcblx0YXNTdHJpbmc6IHN0cmluZztcbn07XG5cbkxvZy5zZXRMZXZlbCgxIGFzIGFueSwgXCJzYXAudWkuY29yZS51dGlsLlhNTFByZXByb2Nlc3NvclwiKTtcbmplc3Quc2V0VGltZW91dCg0MDAwMCk7XG5cbmNvbnN0IG5hbWVTcGFjZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcblx0bWFjcm86IFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRtYWNyb1NoYXJlOiBcInNhcC5mZS5tYWNyb3Muc2hhcmVcIixcblx0bWFjcm9zOiBcInNhcC5mZS5tYWNyb3NcIixcblx0ZmVCQjogXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy50ZW1wbGF0aW5nXCIsXG5cdG1hY3JvRmllbGQ6IFwic2FwLmZlLm1hY3Jvcy5maWVsZFwiLFxuXHRtYWNyb2RhdGE6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRsb2c6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRjdXN0b21EYXRhOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0Y29udHJvbDogXCJzYXAuZmUuY29yZS5jb250cm9sc1wiLFxuXHRjb250cm9sczogXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzXCIsXG5cdGNvcmU6IFwic2FwLnVpLmNvcmVcIixcblx0ZHQ6IFwic2FwLnVpLmR0XCIsXG5cdG06IFwic2FwLm1cIixcblx0ZjogXCJzYXAudWkubGF5b3V0LmZvcm1cIixcblx0Zmw6IFwic2FwLnVpLmZsXCIsXG5cdGludGVybmFsTWFjcm86IFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbFwiLFxuXHRtZGM6IFwic2FwLnVpLm1kY1wiLFxuXHRhY3Rpb250b29sYmFyOiBcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhclwiLFxuXHRtZGNGaWVsZDogXCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdG1kY1RhYmxlOiBcInNhcC51aS5tZGMudGFibGVcIixcblx0dTogXCJzYXAudWkudW5pZmllZFwiLFxuXHR1eGFwOiBcInNhcC51eGFwXCIsXG5cdG1hY3JvTWljcm9DaGFydDogXCJzYXAuZmUubWFjcm9zLm1pY3JvY2hhcnRcIixcblx0bWljcm9DaGFydDogXCJzYXAuc3VpdGUudWkubWljcm9jaGFydFwiLFxuXHRtYWNyb1RhYmxlOiBcInNhcC5mZS5tYWNyb3MudGFibGVcIixcblx0bWRjdmM6IFwic2FwLnVpLm1kYy52YWx1ZWhlbHAuY29udGVudFwiLFxuXHRtZGN2OiBcInNhcC51aS5tZGMudmFsdWVoZWxwXCIsXG5cdHZhbHVlSGVscDogXCJzYXAuZmUubWFjcm9zLnZhbHVlSGVscFwiLFxuXHRjb250ZW50U3dpdGNoZXI6IFwic2FwLmZlLm1hY3Jvcy5jb250ZW50U3dpdGNoZXJcIixcblx0ZmlsdGVyQmFyOiBcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyXCIsXG5cdGRyYWZ0SW5kaWNhdG9yOiBcInNhcC5mZS5tYWNyb3MuZHJhZnRJbmRpY2F0b3JcIixcblx0dmlzdWFsRmlsdGVyOiBcInNhcC5mZS5tYWNyb3MudmlzdWFsZmlsdGVyc1wiLFxuXHRmaWVsZGhlbHA6IFwic2FwLnVpLmNvcmUuZmllbGRoZWxwXCJcbn07XG5jb25zdCByZXZlc2VOYW1lc3BhY2VNYXAgPSBPYmplY3Qua2V5cyhuYW1lU3BhY2VNYXApLnJlZHVjZSgocmV2ZXJzZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY3VycmVudE5hbWUpID0+IHtcblx0cmV2ZXJzZU1hcFtuYW1lU3BhY2VNYXBbY3VycmVudE5hbWVdXSA9IGN1cnJlbnROYW1lO1xuXHRyZXR1cm4gcmV2ZXJzZU1hcDtcbn0sIHt9KTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuY29uc3QgZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSA9IHsgY29tcHV0ZUZpZWxkR3JvdXBJZHM6ICgpID0+IFtdIH07XG5cbmZ1bmN0aW9uIF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb206IE5vZGUsIHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuXHQvKipcblx0ICogaWYgYSByb290IGVsZW1lbnQgaGFzIGJlZW4gYWRkZWQgZHVyaW5nIHRoZSB0ZW1wbGF0aW5nIGJ5IG91ciBKZXN0IFRlbXBsYXRpbmcgbWV0aG9kc1xuXHQgKiB0aGUgcm9vdCBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBzZWxlY3RvciBwYXRoLlxuXHQgKi9cblx0Y29uc3Qgcm9vdFBhdGggPSBcIi9yb290XCI7XG5cdHJldHVybiBgJHt4bWxkb20ubm9kZU5hbWUgPT09IFwicm9vdFwiICYmICFzZWxlY3Rvci5zdGFydHNXaXRoKHJvb3RQYXRoKSA/IHJvb3RQYXRoIDogXCJcIn0ke3NlbGVjdG9yfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duXG4pOiBQcm9taXNlPFByZVByb2Nlc3NvclNldHRpbmdzVHlwZT4ge1xuXHRsZXQgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cdGlmIChzTWV0YWRhdGFVcmwpIHtcblx0XHRvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdFx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cdFx0aWYgKCFtTW9kZWxzLmhhc093blByb3BlcnR5KFwiY29udmVydGVyQ29udGV4dFwiKSkge1xuXHRcdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBjb252ZXJ0ZXJDb250ZXh0OiBuZXcgVGVtcGxhdGVNb2RlbCh7fSwgb01ldGFNb2RlbCEpIH0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5rZXlzKG1Nb2RlbHMpLmZvckVhY2goZnVuY3Rpb24gKHNNb2RlbE5hbWUpIHtcblx0XHRcdGlmIChtTW9kZWxzW3NNb2RlbE5hbWVdICYmIG1Nb2RlbHNbc01vZGVsTmFtZV0uaXNUZW1wbGF0ZU1vZGVsKSB7XG5cdFx0XHRcdG1Nb2RlbHNbc01vZGVsTmFtZV0gPSBuZXcgVGVtcGxhdGVNb2RlbChtTW9kZWxzW3NNb2RlbE5hbWVdLmRhdGEsIG9NZXRhTW9kZWwhKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IHNldHRpbmdzOiBhbnkgPSB7XG5cdFx0bW9kZWxzOiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWxcblx0XHRcdH0sXG5cdFx0XHRtTW9kZWxzXG5cdFx0KSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9LFxuXHRcdGFwcENvbXBvbmVudDoge1xuXHRcdFx0Z2V0Um91dGluZ1NlcnZpY2U6ICgpID0+ICh7XG5cdFx0XHRcdF9nZXRUYXJnZXRJbmZvcm1hdGlvbjogamVzdC5mbigpXG5cdFx0XHR9KSxcblx0XHRcdGdldFNpZGVFZmZlY3RzU2VydmljZTogamVzdC5mbigpLFxuXHRcdFx0Z2V0RGlhZ25vc3RpY3M6ICgpID0+IHVuZGVmaW5lZCxcblx0XHRcdGdldFNoZWxsU2VydmljZXM6IGplc3QuZm4oKSxcblx0XHRcdGdldE1hbmlmZXN0RW50cnk6ICgpID0+IHVuZGVmaW5lZFxuXHRcdH1cblx0fTtcblxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShmYWtlU2lkZUVmZmVjdFNlcnZpY2UgPz8gZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHQvKiBBc3NlcnQgdG8gbWFrZSBzdXJlIHRoZSBhbm5vdGF0aW9ucyBhcmUgaW4gdGhlIHRlc3QgbWV0YWRhdGEgLT4gYXZvaWQgbWlzbGVhZGluZyB0ZXN0cyAqL1xuXHRcdGV4cGVjdCh0eXBlb2Ygb01ldGFNb2RlbD8uZ2V0T2JqZWN0KG1CaW5kaW5nQ29udGV4dHNbc0tleV0pKS50b0JlRGVmaW5lZCgpO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG1Nb2RlbHNbc0tleV0gfHwgb01ldGFNb2RlbDtcblx0XHRzZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0tleV0gPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobUJpbmRpbmdDb250ZXh0c1tzS2V5XSk7IC8vVmFsdWUgaXMgc1BhdGhcblx0XHRzZXR0aW5ncy5tb2RlbHNbc0tleV0gPSBvTW9kZWw7XG5cdH0pO1xuXHRyZXR1cm4gc2V0dGluZ3M7XG59XG5cbmZ1bmN0aW9uIF9sb2FkUmVzb3VyY2VWaWV3KHZpZXdOYW1lOiBzdHJpbmcpOiBFbGVtZW50IHtcblx0Y29uc3QgbmFtZSA9IHZpZXdOYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi9cIikgKyBcIi52aWV3LnhtbFwiO1xuXHRjb25zdCB2aWV3ID0gTG9hZGVyRXh0ZW5zaW9ucy5sb2FkUmVzb3VyY2UobmFtZSk7XG5cdHJldHVybiB2aWV3LmRvY3VtZW50RWxlbWVudDtcbn1cblxuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb20sIHNlbGVjdG9yKSwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sZG9tLCBzZWxlY3RvciksIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fSxcblx0LyoqXG5cdCAqIENoZWNrcyBmb3IgZXJyb3JzIGluIGB4bWxgIGNyZWF0ZWQgZHVyaW5nIHRlbXBsYXRpbmcgb2YgYW4gWE1MIHN0cmluZyBvclxuXHQgKiBhbiBYTUwgbm9kZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBjaGVja2VzIGZvciB0aGUgeG1sIGVycm9ycyBjcmVhdGVkIGJ5IHRoZVxuXHQgKiBmdW5jdGlvbiBbQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yLmNyZWF0ZUVycm9yWE1MXXtAbGluayBzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy50ZW1wbGF0aW5nLkJ1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvciNjcmVhdGVFcnJvclhNTH0uXG5cdCAqIEBwYXJhbSB4bWwgWE1MIFN0cmluZyBvciBYTUwgTm9kZSB0byBiZSB0ZXN0ZWQgZm9yIGVycm9yc1xuXHQgKiBAcmV0dXJucyBKZXN0IE1hdGNoZXIgcmVzdWx0IG9iamVjdFxuXHQgKi9cblx0dG9IYXZlVGVtcGxhdGluZ0Vycm9ycyh4bWw6IHN0cmluZyB8IE5vZGUpIHtcblx0XHRjb25zdCB4bWxUZXh0ID0gdHlwZW9mIHhtbCA9PT0gXCJzdHJpbmdcIiA/IHhtbCA6IHNlcmlhbGl6ZVhNTCh4bWwpO1xuXHRcdGNvbnN0IGJhc2U2NEVudHJpZXM6IHN0cmluZ1tdID0geG1sVGV4dC5tYXRjaCgvQkJGXFwuYmFzZTY0RGVjb2RlXFwoJyhbXiddKiknXFwpL2dtKSB8fCAoW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gYmFzZTY0RW50cmllcy5tYXAoKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBhdG9iKG1lc3NhZ2UubWF0Y2goLygnW14nXSopLyk/LlswXT8uc2xpY2UoMSkgfHwgXCJcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9KTtcblx0XHRpZiAoZXJyb3JNZXNzYWdlcy5sZW5ndGggPD0gMCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bWVzc2FnZTogKCkgPT4gYFhNTCBUZW1wbGF0aW5nIHdpdGhvdXQgZXJyb3JzYCxcblx0XHRcdFx0cGFzczogZmFsc2Vcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1lc3NhZ2U6ICgpID0+IGVycm9yTWVzc2FnZXMuam9pbihcIlxcblwiKSxcblx0XHRcdFx0cGFzczogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cbn0pO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdHJldHVybiBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoJHtfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sRG9tLCBjb250cm9sU2VsZWN0b3IpfS9AJHthdHRyaWJ1dGVOYW1lfSlgO1xuXHRyZXR1cm4gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKTtcbn07XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBwYXJ0cyBvciB0aGUgY29tcGxldGUgZ2l2ZW4gWE1MIERPTSB0byBzdHJpbmcuXG4gKiBAcGFyYW0geG1sRG9tIERPTSBub2RlIHRoYXQgaXMgdG8gYmUgc2VyaWFsaXplZC5cbiAqIEBwYXJhbSBzZWxlY3RvciBPcHRpb25hbCBzZWxlY3RvciBvZiBzdWIgbm9kZXNcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIHNlcmlhbGl6YXRpb24gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMua2VlcER5bmFtaWNJZHMgSWYgc2V0IHRvIHRydWUsIGR5bmFtaWMgSURzIGFyZSBub3QgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlXG4gKiBAcmV0dXJucyBYTUwgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVYTUwgPSBmdW5jdGlvbiAoeG1sRG9tOiBOb2RlLCBzZWxlY3Rvcj86IHN0cmluZywgb3B0aW9ucz86IHsga2VlcER5bmFtaWNJZHM/OiBib29sZWFuIH0pOiBzdHJpbmcge1xuXHRjb25zdCBzZXJpYWxpemVyID0gbmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKCk7XG5cdGxldCB4bWxTdHJpbmc6IHN0cmluZztcblx0aWYgKHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KHNlbGVjdG9yLCB4bWxEb20pIGFzIE5vZGVbXTtcblx0XHR4bWxTdHJpbmcgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcobm9kZSkpLmpvaW4oXCJcXG5cIik7XG5cdH0gZWxzZSB7XG5cdFx0eG1sU3RyaW5nID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyh4bWxEb20pO1xuXHR9XG5cdHJldHVybiBmb3JtYXRYTUwoeG1sU3RyaW5nLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogRm9ybWF0cyBhIHN0cmluZyBjb250YWluaW5nIGFuIFhNTCBkb2N1bWVudC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgY29uc2lkZXJzIFhNTCB0YWdzIGFuZCBhdHRyaWJ1dGVzLCBpZ25vcmluZyBldmVyeXRoaW5nIGVsc2UgKHRleHQsIGNvbW1lbnRzKS4gQWRkaXRpb25hbGx5LFxuICogYXR0cmlidXRlIHZhbHVlcyBjb250YWluaW5nIGEgdmFyeWluZyBVSUQgYXJlIHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZS5cbiAqXG4gKiBBbiBcIlhNTFwiIHN0cmluZyBjb250YWluaW5nIG11bHRpcGxlIHJvb3QgZWxlbWVudHMgY2FuIGJlLlxuICogQHBhcmFtIHhtbFN0cmluZyAgVGhlIGlucHV0IFhNTCBzdHJpbmcuIFRoaXMgZnVuY3Rpb24gYWxzbyBhY2NlcHRzIFwiWE1MXCIgc3RyaW5ncyB3aXRoIG11bHRpcGxlIHJvb3QgZWxlbWVudHMuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zLmtlZXBEeW5hbWljSWRzIElmIHNldCB0byB0cnVlLCBkeW5hbWljIElEcyBhcmUgbm90IHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZVxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBYTUwgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0WE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nLCBvcHRpb25zPzogeyBrZWVwRHluYW1pY0lkcz86IGJvb2xlYW4gfSk6IHN0cmluZyB7XG5cdGNvbnN0IFNUQVJUID0gXCI8X19YTUxfXz5cIixcblx0XHRFTkQgPSBcIjwvX19YTUxfXz5cIixcblx0XHRsaW5lczogc3RyaW5nW10gPSBbXTtcblxuXHRsZXQgY3VycmVudExpbmUgPSBcIlwiLFxuXHRcdGxldmVsID0gLTEsXG5cdFx0YXR0cmlidXRlczogeyBuYW1lOiBzdHJpbmc7IHZhbHVlPzogc3RyaW5nIH1bXSA9IFtdO1xuXG5cdGZ1bmN0aW9uIG5ld2xpbmUoKSB7XG5cdFx0aWYgKGN1cnJlbnRMaW5lICYmIGN1cnJlbnRMaW5lICE9PSBTVEFSVCkge1xuXHRcdFx0bGluZXMucHVzaChjdXJyZW50TGluZSk7XG5cdFx0fVxuXG5cdFx0Y3VycmVudExpbmUgPSBsZXZlbCA+IDAgPyBcIiAgXCIucmVwZWF0KGxldmVsKSA6IFwiXCI7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRBdHRyaWJ1dGVzKCkge1xuXHRcdGlmIChhdHRyaWJ1dGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLnNvcnQoKGEsIGIpID0+IHtcblx0XHRcdFx0aWYgKGEubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikgJiYgIWIubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWEubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikgJiYgYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGEubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikgJiYgYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGEubmFtZS5pbmNsdWRlcyhcIjpcIikgJiYgIWIubmFtZS5pbmNsdWRlcyhcIjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWEubmFtZS5pbmNsdWRlcyhcIjpcIikgJiYgYi5uYW1lLmluY2x1ZGVzKFwiOlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0bGV2ZWwrKztcblx0XHRcdGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0bmV3bGluZSgpO1xuXHRcdFx0XHRjdXJyZW50TGluZSArPSBhdHRyaWJ1dGUubmFtZTtcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZS52YWx1ZSkgY3VycmVudExpbmUgKz0gYXR0cmlidXRlLnZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0bGV2ZWwtLTtcblx0XHRcdGF0dHJpYnV0ZXMgPSBbXTtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmQoZGF0YTogUmFuZ2UpIHtcblx0XHRjdXJyZW50TGluZSArPSBwYXJzZXIucmVhZChkYXRhKTtcblx0fVxuXG5cdGNvbnN0IHBhcnNlciA9IGNyZWF0ZVBhcnNlcih7XG5cdFx0b25PcGVuVGFnU3RhcnQoZGF0YTogUmFuZ2UpIHtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHR9LFxuXG5cdFx0b25PcGVuVGFnTmFtZTogYXBwZW5kLFxuXG5cdFx0b25BdHRyTmFtZShkYXRhOiBSYW5nZSkge1xuXHRcdFx0YXR0cmlidXRlcy51bnNoaWZ0KHsgbmFtZTogcGFyc2VyLnJlYWQoZGF0YSkgfSk7XG5cdFx0fSxcblxuXHRcdG9uQXR0clZhbHVlKGRhdGE6IFJhbmdlcy5BdHRyVmFsdWUpIHtcblx0XHRcdGF0dHJpYnV0ZXNbMF0udmFsdWUgPSBwYXJzZXIucmVhZChkYXRhKTtcblx0XHRcdGF0dHJpYnV0ZXNbMF0udmFsdWUgPSBwYXJzZXIucmVhZChkYXRhKTtcblx0XHRcdGlmIChvcHRpb25zPy5rZWVwRHluYW1pY0lkcyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRhdHRyaWJ1dGVzWzBdLnZhbHVlID0gcmVtb3ZlRHluYW1pY0lkKGF0dHJpYnV0ZXNbMF0udmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRvbk9wZW5UYWdFbmQoZGF0YTogUmFuZ2VzLk9wZW5UYWdFbmQpIHtcblx0XHRcdGFwcGVuZEF0dHJpYnV0ZXMoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHRcdGlmICghZGF0YS5zZWxmQ2xvc2VkKSBsZXZlbCsrO1xuXHRcdH0sXG5cblx0XHRvbkNsb3NlVGFnU3RhcnQoZGF0YTogUmFuZ2UpIHtcblx0XHRcdGxldmVsLS07XG5cdFx0XHRuZXdsaW5lKCk7XG5cdFx0XHRhcHBlbmQoZGF0YSk7XG5cdFx0fSxcblxuXHRcdG9uQ2xvc2VUYWdOYW1lOiBhcHBlbmQsXG5cdFx0b25DbG9zZVRhZ0VuZDogYXBwZW5kXG5cdH0pO1xuXG5cdHBhcnNlci5wYXJzZShTVEFSVCArIHhtbFN0cmluZyArIEVORCk7XG5cdHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpLnRyaW0oKTtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBhIENEUyBmaWxlIGludG8gYW4gRURNWCBmaWxlLlxuICogQHBhcmFtIGNkc1VybCBUaGUgcGF0aCB0byB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBDRFMgZGVmaW5pdGlvbi4gVGhpcyBmaWxlIG11c3QgZGVjbGFyZSB0aGUgbmFtZXNwYWNlXG4gKiBzYXAuZmUudGVzdCBhbmQgYSBzZXJ2aWNlIEplc3RTZXJ2aWNlXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgRURNWCBvdXRwdXRcbiAqIEByZXR1cm5zIFRoZSBwYXRoIG9mIHRoZSBnZW5lcmF0ZWQgRURNWFxuICovXG5leHBvcnQgY29uc3QgY29tcGlsZUNEUyA9IGZ1bmN0aW9uIChjZHNVcmw6IHN0cmluZywgb3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge30pIHtcblx0Y29uc3QgY2RzU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNkc1VybCwgXCJ1dGYtOFwiKTtcblx0Y29uc3QgZWRteENvbnRlbnQgPSBjZHMyZWRteChjZHNTdHJpbmcsIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9ucyk7XG5cdGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShjZHNVcmwsIFwiLi5cIiwgXCJnZW5cIik7XG5cblx0Ly8gSWYgdGhlIGNhbGxlciBwcm92aWRlZCBDRFMgY29tcGlsZXIgb3B0aW9uczogSW5jbHVkZSB0aGVtIGluIHRoZSBmaWxlbmFtZS4gVGhpcyBwcmV2ZW50cyB1bnByZWRpY3RhYmxlIHJlc3VsdHMgaWYgdGhlIHNhbWUgQ0RTIHNvdXJjZVxuXHQvLyBmaWxlIGlzIHVzZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCBhIGRpZmZlcmVudCBzZXQgb2Ygb3B0aW9ucyAoZS5nLiBpbiBhIHRlc3QgcnVubmluZyBpbiBwYXJhbGxlbClcblx0Y29uc3QgYWxsT3B0aW9ucyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpO1xuXHRhbGxPcHRpb25zLnNvcnQoKGEsIGIpID0+IGJbMF0ubG9jYWxlQ29tcGFyZShhWzBdKSk7XG5cblx0Y29uc3QgZWRteEZpbGVOYW1lID1cblx0XHRhbGxPcHRpb25zLnJlZHVjZShcblx0XHRcdChmaWxlbmFtZSwgW29wdGlvbktleSwgb3B0aW9uVmFsdWVdKSA9PiBgJHtmaWxlbmFtZX0jJHtvcHRpb25LZXl9PSR7b3B0aW9uVmFsdWUudG9TdHJpbmcoKX0jYCxcblx0XHRcdHBhdGguYmFzZW5hbWUoY2RzVXJsKS5yZXBsYWNlKFwiLmNkc1wiLCBcIlwiKVxuXHRcdCkgKyBcIi54bWxcIjtcblxuXHRjb25zdCBlZG14RmlsZVBhdGggPSBwYXRoLnJlc29sdmUoZGlyLCBlZG14RmlsZU5hbWUpO1xuXG5cdGZzLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdGZzLndyaXRlRmlsZVN5bmMoZWRteEZpbGVQYXRoLCBlZG14Q29udGVudCk7XG5cdHJldHVybiBlZG14RmlsZVBhdGg7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgQ0RTIHRvIEVETVguXG4gKiBAcGFyYW0gY2RzIFRoZSBDRFMgbW9kZWwuIEl0IG11c3QgZGVmaW5lIGF0IGxlYXN0IG9uZSBzZXJ2aWNlLlxuICogQHBhcmFtIHNlcnZpY2UgVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIGJlIGNvbXBpbGVkLiBEZWZhdWx0cyB0byBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgRURNWCBvdXRwdXRcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzZXJ2aWNlIG1vZGVsIGFzIEVETVguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjZHMyZWRteChjZHM6IHN0cmluZywgc2VydmljZSA9IFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge30pIHtcblx0Y29uc3Qgc291cmNlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgXCJzb3VyY2UuY2RzXCI6IGNkcyB9O1xuXG5cdC8vIGFsbG93IHRvIGluY2x1ZGUgc3R1ZmYgZnJvbSBAc2FwL2Nkcy9jb21tb25cblx0aWYgKGNkcy5pbmNsdWRlcyhcIidAc2FwL2Nkcy9jb21tb24nXCIpKSB7XG5cdFx0c291cmNlc1tcImNvbW1vbi5jZHNcIl0gPSBmcy5yZWFkRmlsZVN5bmMocmVxdWlyZS5yZXNvbHZlKFwiQHNhcC9jZHMvY29tbW9uLmNkc1wiKSwgXCJ1dGYtOFwiKTtcblx0fVxuXG5cdGNvbnN0IGNzbiA9IGNvbXBpbGVyLmNvbXBpbGVTb3VyY2VzKHNvdXJjZXMsIHt9KTtcblxuXHRjb25zdCBlZG14T3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge1xuXHRcdG9kYXRhRm9yZWlnbktleXM6IHRydWUsXG5cdFx0b2RhdGFGb3JtYXQ6IFwic3RydWN0dXJlZFwiLFxuXHRcdG9kYXRhQ29udGFpbm1lbnQ6IHRydWUsXG5cdFx0Li4ub3B0aW9ucyxcblx0XHRzZXJ2aWNlOiBzZXJ2aWNlXG5cdH07XG5cblx0Y29uc3QgZWRteCA9IGNvbXBpbGVyLnRvLmVkbXgoY3NuLCBlZG14T3B0aW9ucyk7XG5cdGlmICghZWRteCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29tcGlsYXRpb24gZmFpbGVkLiBIaW50OiBNYWtlIHN1cmUgdGhhdCB0aGUgQ0RTIG1vZGVsIGRlZmluZXMgc2VydmljZSAke3NlcnZpY2V9LmApO1xuXHR9XG5cdHJldHVybiBlZG14O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSA9IGFzeW5jIGZ1bmN0aW9uIChcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0Y2xhc3NOYW1lT0RhdGFNb2RlbCA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIlxuKTogUHJvbWlzZTxTaWRlRWZmZWN0c1NlcnZpY2U+IHtcblx0Y29uc3Qgc2NvcGVPYmplY3QgPSB7XG5cdFx0Z2V0TW9kZWw6ICgpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlzQTogKCkgPT4gY2xhc3NOYW1lT0RhdGFNb2RlbCA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiLFxuXHRcdFx0XHRnZXRNZXRhTW9kZWw6ICgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbWV0YU1vZGVsO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXRTZXJ2aWNlVXJsOiAoKSA9PiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0fSxcblx0XHRnZXRTZXJ2aWNlOiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRnZXRDYXBhYmlsaXRpZXM6ICgpID0+IHVuZGVmaW5lZFxuXHRcdFx0fTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IHNlcnZpY2VJbnN0YW5jZSA9IGF3YWl0IG5ldyBTaWRlRWZmZWN0c0ZhY3RvcnkoKS5jcmVhdGVJbnN0YW5jZSh7IHNjb3BlT2JqZWN0LCBzY29wZVR5cGU6IFwiXCIsIHNldHRpbmdzOiB7fSB9KTtcblx0cmV0dXJuIHNlcnZpY2VJbnN0YW5jZS5nZXRJbnRlcmZhY2UoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlRGlhZ25vc3RpY3MgPSBmdW5jdGlvbiAoKTogSURpYWdub3N0aWNzIHtcblx0Y29uc3QgaXNzdWVzOiBhbnlbXSA9IFtdO1xuXHRyZXR1cm4ge1xuXHRcdGFkZElzc3VlKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0aXNzdWVzLnB1c2goe1xuXHRcdFx0XHRpc3N1ZUNhdGVnb3J5LFxuXHRcdFx0XHRpc3N1ZVNldmVyaXR5LFxuXHRcdFx0XHRkZXRhaWxzXG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdGdldElzc3VlcygpOiBhbnlbXSB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzO1xuXHRcdH0sXG5cdFx0Y2hlY2tJZklzc3VlRXhpc3RzKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcy5maW5kKChpc3N1ZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXNzdWUuaXNzdWVDYXRlZ29yeSA9PT0gaXNzdWVDYXRlZ29yeSAmJiBpc3N1ZS5pc3N1ZVNldmVyaXR5ID09PSBpc3N1ZVNldmVyaXR5ICYmIGlzc3VlLmRldGFpbHMgPT09IGRldGFpbHM7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QgPSBmdW5jdGlvbiAoXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG1hbmlmZXN0U2V0dGluZ3M6IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3Ncbikge1xuXHRjb25zdCBjb252ZXJ0ZWRUeXBlcyA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gbWFuaWZlc3RTZXR0aW5ncy5jb250ZXh0UGF0aFxuXHRcdD8gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4obWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1hbmlmZXN0U2V0dGluZ3MuY29udGV4dFBhdGgpIGFzIENvbnRleHQpXG5cdFx0OiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PihtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke21hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0fWApKTtcblx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4oXG5cdFx0Y29udmVydGVkVHlwZXMsXG5cdFx0bmV3IE1hbmlmZXN0V3JhcHBlcihtYW5pZmVzdFNldHRpbmdzKSxcblx0XHRnZXRGYWtlRGlhZ25vc3RpY3MoKSxcblx0XHRkYXRhTW9kZWxQYXRoXG5cdCk7XG59O1xuY29uc3QgbWV0YU1vZGVsQ2FjaGU6IGFueSA9IHt9O1xuZXhwb3J0IGNvbnN0IGdldE1ldGFNb2RlbCA9IGFzeW5jIGZ1bmN0aW9uIChzTWV0YWRhdGFVcmw6IHN0cmluZykge1xuXHRjb25zdCBvUmVxdWVzdG9yID0gX01ldGFkYXRhUmVxdWVzdG9yLmNyZWF0ZSh7fSwgXCI0LjBcIiwgdW5kZWZpbmVkLCB7fSwge30sIGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSk7XG5cdGlmICghbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBuZXcgKE9EYXRhTWV0YU1vZGVsIGFzIGFueSkob1JlcXVlc3Rvciwgc01ldGFkYXRhVXJsLCB1bmRlZmluZWQsIHsgX3JlcXVlc3RBbm5vdGF0aW9uQ2hhbmdlczogKCkgPT4gW10gfSk7XG5cdFx0YXdhaXQgb01ldGFNb2RlbC5mZXRjaEVudGl0eUNvbnRhaW5lcigpO1xuXHRcdG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0gPSBvTWV0YU1vZGVsO1xuXHR9XG5cblx0cmV0dXJuIG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5ID0gZnVuY3Rpb24gPFQgPSBQcm9wZXJ0eSB8IEVudGl0eVNldCB8IEFueUFubm90YXRpb24+KFxuXHRlbnRpdHlTZXQ6IEVudGl0eVNldCxcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRwcm9wZXJ0eT86IFRcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4ge1xuXHRjb25zdCB0YXJnZXRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+ID0ge1xuXHRcdHN0YXJ0aW5nRW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdHRhcmdldE9iamVjdDogcHJvcGVydHksXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogZW50aXR5U2V0LmVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVkVHlwZXM6IGNvbnZlcnRlZFR5cGVzXG5cdH07XG5cdHRhcmdldFBhdGguY29udGV4dExvY2F0aW9uID0gdGFyZ2V0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD47XG5cdHJldHVybiB0YXJnZXRQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nU3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ0luZm8ucGFyc2UoYmluZGluZ1N0cmluZyk7XG5cdHJldHVybiBiaW5kaW5nRWxlbWVudC5mb3JtYXR0ZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbn07XG5cbnR5cGUgTW9kZWxDb250ZW50ID0ge1xuXHRbbmFtZTogc3RyaW5nXTogYW55O1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSBhIGJpbmRpbmcgYWdhaW5zdCBhIG1vZGVsLlxuICogQHBhcmFtIGJpbmRpbmdTdHJpbmcgVGhlIGJpbmRpbmcgc3RyaW5nLlxuICogQHBhcmFtIG1vZGVsQ29udGVudCBDb250ZW50IG9mIHRoZSBkZWZhdWx0IG1vZGVsIHRvIHVzZSBmb3IgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBuYW1lZE1vZGVsc0NvbnRlbnQgQ29udGVudHMgb2YgYWRkaXRpb25hbCwgbmFtZWQgbW9kZWxzIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmluZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbChcblx0YmluZGluZ1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbENvbnRlbnQ6IE1vZGVsQ29udGVudCxcblx0bmFtZWRNb2RlbHNDb250ZW50PzogeyBbbW9kZWxOYW1lOiBzdHJpbmddOiBNb2RlbENvbnRlbnQgfVxuKTogc3RyaW5nIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nSW5mby5wYXJzZShiaW5kaW5nU3RyaW5nLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwge1xuXHRcdFwiLlwiOiB7XG5cdFx0XHRfZm9ybWF0dGVyczoge1xuXHRcdFx0XHRWYWx1ZUZvcm1hdHRlcjogVmFsdWVGb3JtYXR0ZXJcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRjb25zdCB0ZXh0ID0gbmV3IEludmlzaWJsZVRleHQoKTtcblx0dGV4dC5iaW5kUHJvcGVydHkoXCJ0ZXh0XCIsIGJpbmRpbmdFbGVtZW50KTtcblxuXHRjb25zdCBkZWZhdWx0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1vZGVsQ29udGVudCk7XG5cdHRleHQuc2V0TW9kZWwoZGVmYXVsdE1vZGVsKTtcblx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChkZWZhdWx0TW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpKTtcblxuXHRpZiAobmFtZWRNb2RlbHNDb250ZW50KSB7XG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMobmFtZWRNb2RlbHNDb250ZW50KSkge1xuXHRcdFx0Y29uc3QgbW9kZWwgPSBuZXcgSlNPTk1vZGVsKGNvbnRlbnQpO1xuXHRcdFx0dGV4dC5zZXRNb2RlbChtb2RlbCwgbmFtZSk7XG5cdFx0XHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSwgbmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRleHQuZ2V0VGV4dCgpO1xufVxuXG5jb25zdCBURVNUVklFV0lEID0gXCJ0ZXN0Vmlld0lkXCI7XG5cbmNvbnN0IGFwcGx5RmxleENoYW5nZXMgPSBhc3luYyBmdW5jdGlvbiAoZmxleENoYW5nZXM6IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sIG9NZXRhTW9kZWw6IE1ldGFNb2RlbCwgcmVzdWx0WE1MOiBhbnkpIHtcblx0Ly8gcHJlZml4IElkc1xuXHRbLi4ucmVzdWx0WE1MLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbaWRdXCIpXS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0bm9kZS5pZCA9IGAke1RFU1RWSUVXSUR9LS0ke25vZGUuaWR9YDtcblx0fSk7XG5cdGNvbnN0IGNoYW5nZXMgPSBjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QoVEVTVFZJRVdJRCwgZmxleENoYW5nZXMpO1xuXHRjb25zdCBhcHBJZCA9IFwic29tZUNvbXBvbmVudFwiO1xuXHRjb25zdCBvTWFuaWZlc3QgPSB7XG5cdFx0XCJzYXAuYXBwXCI6IHtcblx0XHRcdGlkOiBhcHBJZCxcblx0XHRcdHR5cGU6IFwiYXBwbGljYXRpb25cIixcblx0XHRcdGNyb3NzTmF2aWdhdGlvbjoge1xuXHRcdFx0XHRvdXRib3VuZHM6IFtdXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgPSB7XG5cdFx0Z2V0RGlhZ25vc3RpY3M6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoZ2V0RmFrZURpYWdub3N0aWNzKCkpLFxuXHRcdGdldE1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdGdldE1ldGFNb2RlbDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShvTWV0YU1vZGVsKVxuXHRcdH0pLFxuXHRcdGdldENvbXBvbmVudERhdGE6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe30pLFxuXHRcdGdldE1hbmlmZXN0T2JqZWN0OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdGdldEVudHJ5OiBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiAob01hbmlmZXN0IGFzIGFueSlbbmFtZV07XG5cdFx0XHR9XG5cdFx0fSksXG5cdFx0Z2V0TG9jYWxJZDogamVzdC5mbigoc0lkKSA9PiBzSWQpXG5cdH0gYXMgdW5rbm93biBhcyBBcHBDb21wb25lbnQ7XG5cdC8vZmFrZSBjaGFuZ2VzXG5cdGplc3Quc3B5T24oQXBwU3RvcmFnZSwgXCJsb2FkRmxleERhdGFcIikubW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZShjaGFuZ2VzKSk7XG5cdGplc3Quc3B5T24oTG9hZGVyLCBcImdldEZsZXhEYXRhXCIpLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoeyBkYXRhOiBjaGFuZ2VzIH0pKTtcblx0amVzdC5zcHlPbihMb2FkZXIsIFwiZ2V0Q2FjaGVkRmxleERhdGFcIikubW9ja1JldHVyblZhbHVlKGNoYW5nZXMpO1xuXG5cdGplc3Quc3B5T24oQ29tcG9uZW50IGFzIHVua25vd24gYXMgeyBnZXRDb21wb25lbnRCeUlkOiAoKSA9PiBBcHBDb21wb25lbnQgfSwgXCJnZXRDb21wb25lbnRCeUlkXCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0amVzdC5zcHlPbihVdGlscywgXCJnZXRBcHBDb21wb25lbnRGb3JDb250cm9sXCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0YXdhaXQgRmxleFN0YXRlLmluaXRpYWxpemUoe1xuXHRcdGNvbXBvbmVudElkOiBhcHBJZFxuXHR9KTtcblx0cmVzdWx0WE1MID0gYXdhaXQgWG1sUHJlcHJvY2Vzc29yLnByb2Nlc3MocmVzdWx0WE1MLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiLCBjb21wb25lbnRJZDogYXBwSWQsIGlkOiBURVNUVklFV0lEIH0pO1xuXG5cdC8vQXNzZXJ0IHRoYXQgYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIGFwcGxpZWRcblx0Y29uc3QgY2hhbmdlc0FwcGxpZWQgPSBnZXRDaGFuZ2VzRnJvbVhNTChyZXN1bHRYTUwpO1xuXHRleHBlY3QoY2hhbmdlc0FwcGxpZWQubGVuZ3RoKS50b0JlKGZsZXhDaGFuZ2VzPy5jaGFuZ2VzPy5sZW5ndGggPz8gZmxleENoYW5nZXM/LnZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcz8ubGVuZ3RoID8/IDApO1xuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENoYW5nZXNGcm9tWE1MID0gKHhtbDogYW55KSA9PlxuXHRbLi4ueG1sLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpXVxuXHRcdC5mbGF0TWFwKChlKSA9PiBbLi4uZS5hdHRyaWJ1dGVzXS5tYXAoKGEpID0+IGEubmFtZSkpXG5cdFx0LmZpbHRlcigoYXR0cikgPT4gYXR0ci5pbmNsdWRlcyhcInNhcC51aS5mbC5hcHBsaWVkQ2hhbmdlc1wiKSk7XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSxcblx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlPzogdW5rbm93blxuKSB7XG5cdGlmICghbU1vZGVsc1tcInNhcC5mZS5pMThuXCJdKSB7XG5cdFx0bU1vZGVsc1tcInNhcC5mZS5pMThuXCJdID0gY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwoKTtcblx0fVxuXG5cdGNvbnN0IHRlbXBsYXRlZFhtbCA9IGA8cm9vdD4ke3htbElucHV0fTwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRlbXBsYXRlZFhtbCwgXCJ0ZXh0L3htbFwiKTtcblx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscywgZmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdGxldCByZXN1bHRYTUwgPSAoYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoeG1sRG9jLmZpcnN0RWxlbWVudENoaWxkISwgeyBuYW1lOiBcIlRlc3QgRnJhZ21lbnRcIiB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpKSBhcyBhbnk7XG5cblx0aWYgKHNNZXRhZGF0YVVybCAmJiBmbGV4Q2hhbmdlcykge1xuXHRcdC8vIGFwcGx5IGZsZXggY2hhbmdlc1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0XHRyZXN1bHRYTUwgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzLCBvTWV0YU1vZGVsLCByZXN1bHRYTUwpO1xuXHR9XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd24sXG5cdG9wdGlvbnM/OiB7IGtlZXBEeW5hbWljSWRzPzogYm9vbGVhbiB9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRyZXR1cm4ganN4LmRlZmluZVhNTE5hbWVzcGFjZU1hcChyZXZlc2VOYW1lc3BhY2VNYXAsIGFzeW5jICgpID0+IHtcblx0XHRjb25zdCB0ZW1wbGF0ZWRYTUwgPSBhd2FpdCBnZXRUZW1wbGF0aW5nUmVzdWx0KFxuXHRcdFx0eG1sSW5wdXQsXG5cdFx0XHRzTWV0YWRhdGFVcmwsXG5cdFx0XHRtQmluZGluZ0NvbnRleHRzLFxuXHRcdFx0bU1vZGVscyxcblx0XHRcdGZsZXhDaGFuZ2VzLFxuXHRcdFx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlXG5cdFx0KTtcblx0XHRjb25zdCBzZXJpYWxpZWRYTUwgPSBzZXJpYWxpemVYTUwodGVtcGxhdGVkWE1MLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuXHRcdGV4cGVjdChzZXJpYWxpZWRYTUwpLm5vdC50b0hhdmVUZW1wbGF0aW5nRXJyb3JzKCk7XG5cdFx0cmV0dXJuIHNlcmlhbGllZFhNTDtcblx0fSkgYXMgdW5rbm93biBhcyBQcm9taXNlPHN0cmluZz47XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCB2aWV3IHdpdGggdGhlIHByb3ZpZGVkIGRhdGEuXG4gKiBAcGFyYW0gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdmlldyB0byBiZSB0ZXN0ZWQuXG4gKiBAcGFyYW0gc01ldGFkYXRhVXJsIFVybCBvZiB0aGUgbWV0YWRhdGEuXG4gKiBAcGFyYW0gbUJpbmRpbmdDb250ZXh0cyBNYXAgb2YgdGhlIGJpbmRpbmdDb250ZXh0cyB0byBzZXQgb24gdGhlIG1vZGVscy5cbiAqIEBwYXJhbSBtTW9kZWxzIE1hcCBvZiB0aGUgbW9kZWxzLlxuICogQHBhcmFtIGZsZXhDaGFuZ2VzIE9iamVjdCB3aXRoIFVJIGNoYW5nZXMgbGlrZSAnY2hhbmdlcycgb3IgJ3ZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcydcbiAqIEByZXR1cm5zIFRlbXBsYXRlZCB2aWV3IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoXG5cdG5hbWU6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmxleENoYW5nZXM/OiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9XG4pOiBQcm9taXNlPEplc3RUZW1wbGF0ZWRWaWV3PiB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0Y29uc3Qgb1ZpZXdEb2N1bWVudCA9IF9sb2FkUmVzb3VyY2VWaWV3KG5hbWUpO1xuXHRjb25zdCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSBhd2FpdCBfYnVpbGRQcmVQcm9jZXNzb3JTZXR0aW5ncyhzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMpO1xuXHRsZXQgb1ByZXByb2Nlc3NlZFZpZXcgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhvVmlld0RvY3VtZW50LCB7IG5hbWU6IG5hbWUgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcblx0aWYgKGZsZXhDaGFuZ2VzKSB7XG5cdFx0b1ByZXByb2Nlc3NlZFZpZXcgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzID8/IFtdLCBvTWV0YU1vZGVsLCBvUHJlcHJvY2Vzc2VkVmlldyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRhc0VsZW1lbnQ6IG9QcmVwcm9jZXNzZWRWaWV3LFxuXHRcdGFzU3RyaW5nOiBmb3JtYXRYTUwob1ByZXByb2Nlc3NlZFZpZXc/Lm91dGVySFRNTCB8fCBcIlwiKVxuXHR9O1xufVxuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCBYTUwgZnJhZ21lbnQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqIEBwYXJhbSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBmcmFnbWVudCB0byBiZSB0ZXN0ZWQuXG4gKiBAcGFyYW0gdGVzdERhdGEgVGVzdCBkYXRhIGNvbnNpc3RpbmdcbiAqIEByZXR1cm5zIFRlbXBsYXRlZCBmcmFnbWVudCBhcyBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGcmFnbWVudChuYW1lOiBzdHJpbmcsIHRlc3REYXRhOiB7IFttb2RlbDogc3RyaW5nXTogb2JqZWN0IH0pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBpbnB1dFhtbCA9IGA8cm9vdD48Y29yZTpGcmFnbWVudCBmcmFnbWVudE5hbWU9XCIke25hbWV9XCIgdHlwZT1cIlhNTFwiIHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiIC8+PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cblx0Y29uc3QgaW5wdXREb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGlucHV0WG1sLCBcInRleHQveG1sXCIpO1xuXG5cdC8vIGJ1aWxkIG1vZGVsIGFuZCBiaW5kaW5ncyBmb3IgZ2l2ZW4gdGVzdCBkYXRhXG5cdGNvbnN0IHNldHRpbmdzID0ge1xuXHRcdG1vZGVsczoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogSlNPTk1vZGVsIH0sXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBvYmplY3QgfSxcblx0XHRhcHBDb21wb25lbnQ6IHsgZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlOiBqZXN0LmZuKCksIGdldERpYWdub3N0aWNzOiAoKSA9PiB1bmRlZmluZWQgfVxuXHR9O1xuXHRmb3IgKGNvbnN0IG1vZGVsIGluIHRlc3REYXRhKSB7XG5cdFx0Y29uc3QganNvbk1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGpzb25Nb2RlbC5zZXREYXRhKHRlc3REYXRhW21vZGVsXSk7XG5cdFx0c2V0dGluZ3MubW9kZWxzW21vZGVsXSA9IGpzb25Nb2RlbDtcblx0XHRzZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbbW9kZWxdID0gc2V0dGluZ3MubW9kZWxzW21vZGVsXS5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG5cdH1cblx0c2V0dGluZ3MuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZS5tb2NrUmV0dXJuVmFsdWUoZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cblx0Ly8gZXhlY3V0ZSB0aGUgcHJlLXByb2Nlc3NvclxuXHRjb25zdCByZXN1bHREb2MgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhpbnB1dERvYy5maXJzdEVsZW1lbnRDaGlsZCwgeyBuYW1lIH0sIHNldHRpbmdzKTtcblxuXHQvLyBleGNsdWRlIG5lc3RlZCBmcmFnbWVudHMgZnJvbSB0ZXN0IHNuYXBzaG90c1xuXHRjb25zdCBmcmFnbWVudHMgPSByZXN1bHREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjb3JlOkZyYWdtZW50XCIpIGFzIGFueTtcblx0aWYgKGZyYWdtZW50cz8ubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgZnJhZ21lbnQgb2YgZnJhZ21lbnRzKSB7XG5cdFx0XHRmcmFnbWVudC5pbm5lckhUTUwgPSBcIlwiO1xuXHRcdH1cblx0fVxuXG5cdC8vIEtlZXAgdGhlIGZyYWdtZW50IHJlc3VsdCBhcyBjaGlsZCBvZiByb290IG5vZGUgd2hlbiBmcmFnbWVudCBnZW5lcmF0ZXMgbXVsdGlwbGUgcm9vdCBjb250cm9sc1xuXHRjb25zdCB4bWxSZXN1bHQgPSByZXN1bHREb2MuY2hpbGRyZW4ubGVuZ3RoID4gMSA/IHJlc3VsdERvYy5vdXRlckhUTUwgOiByZXN1bHREb2MuaW5uZXJIVE1MO1xuXG5cdHJldHVybiBmb3JtYXRYTUwoeG1sUmVzdWx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBzdHJpbmcgb2YgdGFiIGNoYXJhY3RlcnMgZm9yIGluZGVudGF0aW9uLlxuICogQHBhcmFtIHRhYkNvdW50IFRoZSBudW1iZXIgb2YgdGFicyB0byBnZW5lcmF0ZS5cbiAqIEBwYXJhbSB0b0FkZCBBZGRpdGlvbmFsIHRhYnMgdG8gYWRkLlxuICogQHJldHVybnMgQSBzdHJpbmcgb2YgdGFiIGNoYXJhY3RlcnMuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYih0YWJDb3VudDogbnVtYmVyLCB0b0FkZCA9IDApIHtcblx0bGV0IHRhYiA9IFwiXCI7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgdGFiQ291bnQgKyB0b0FkZDsgaSsrKSB7XG5cdFx0dGFiICs9IFwiXFx0XCI7XG5cdH1cblx0cmV0dXJuIHRhYjtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyBkeW5hbWljIElEcyBpbiBhIHN0cmluZyB3aXRoIGEgY29uc3RhbnQgdmFsdWUuXG4gKiBAcGFyYW0gaWQgVGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBkeW5hbWljIElEcy5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgd2l0aCBkeW5hbWljIElEcyByZXBsYWNlZC5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRHluYW1pY0lkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBVSUQgPSAvdWlkLS1pZC1cXGR7MTN9LVxcZHsxLDR9Lztcblx0Y29uc3QgQ09OVFJPTElEID0gL2lkLVxcZHsxM30tXFxkezEsNH0vO1xuXHRyZXR1cm4gaWQucmVwbGFjZShVSUQsIFwidWlkLS1pZFwiKS5yZXBsYWNlKENPTlRST0xJRCwgXCJpZFwiKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgZnJvbSBhIGNvbnRyb2wsIHdpdGggb3B0aW9ucyB0byBoYW5kbGUgZHluYW1pYyBJRHMuXG4gKiBAcGFyYW0gY29udHJvbCBUaGUgY29udHJvbCB0byByZXRyaWV2ZSB0aGUgcHJvcGVydHkgZnJvbS5cbiAqIEBwYXJhbSBwcm9wZXJ0eUtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIHNldHRpbmdzIGZvciByZXRyaWV2aW5nIHRoZSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBvcHRpb25zLmtlZXBEeW5hbWljSWRzIElmIHNldCB0byB0cnVlLCBkeW5hbWljIElEcyBhcmUgbm90IHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZS5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHksIG9yIHVuZGVmaW5lZCBpZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QuXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BlcnR5KFxuXHRjb250cm9sOiBDb250cm9sLFxuXHRwcm9wZXJ0eUtleTogc3RyaW5nLFxuXHRvcHRpb25zPzoge1xuXHRcdGtlZXBEeW5hbWljSWRzPzogYm9vbGVhbjtcblx0fVxuKSB7XG5cdGxldCBwcm9wZXJ0eVZhbHVlID0gY29udHJvbC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHByb3BlcnR5VmFsdWUgPSBvcHRpb25zPy5rZWVwRHluYW1pY0lkcyAhPT0gdHJ1ZSA/IHJlbW92ZUR5bmFtaWNJZChwcm9wZXJ0eVZhbHVlKSA6IHByb3BlcnR5VmFsdWU7XG5cdFx0aWYgKHByb3BlcnR5VmFsdWUgPT09IFwiXCIpIHtcblx0XHRcdHByb3BlcnR5VmFsdWUgPSBcIjxlbXB0eVN0cmluZz5cIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHR0cnkge1xuXHRcdFx0cHJvcGVydHlWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KHByb3BlcnR5VmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBidXQgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGRcblx0XHR9XG5cdH1cblx0cmV0dXJuIHByb3BlcnR5VmFsdWU7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBiaW5kaW5nIG9mIGEgcHJvcGVydHkgZnJvbSBhIGNvbnRyb2wuXG4gKiBAcGFyYW0gY29udHJvbCBUaGUgY29udHJvbCB0byByZXRyaWV2ZSB0aGUgYmluZGluZyBmcm9tLlxuICogQHBhcmFtIHByb3BlcnR5S2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIHJldHJpZXZlIHRoZSBiaW5kaW5nIGZvci5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIHNldHRpbmdzIGZvciByZXRyaWV2aW5nIHRoZSBiaW5kaW5nLlxuICogQHBhcmFtIG9wdGlvbnMua2VlcER5bmFtaWNJZHMgSWYgc2V0IHRvIHRydWUsIGR5bmFtaWMgSURzIGFyZSBub3QgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGdldEJpbmRpbmdJbmZvKFxuXHRjb250cm9sOiBDb250cm9sLFxuXHRwcm9wZXJ0eUtleTogc3RyaW5nLFxuXHRvcHRpb25zPzoge1xuXHRcdGtlZXBEeW5hbWljSWRzPzogYm9vbGVhbjtcblx0fVxuKSB7XG5cdGNvbnN0IGJpbmRpbmdEZXRhaWwgPSB7IC4uLihjb250cm9sLmdldEJpbmRpbmdJbmZvKHByb3BlcnR5S2V5KSBhcyBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eUJpbmRpbmdJbmZvPikgfTtcblx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZT8ub091dHB1dEZvcm1hdCkge1xuXHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLnR5cGUub091dHB1dEZvcm1hdDtcblx0fVxuXHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nKSB7XG5cdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwuYmluZGluZztcblx0fVxuXHRjb25zdCB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KGJpbmRpbmdEZXRhaWwpO1xuXHRyZXR1cm4gb3B0aW9ucz8ua2VlcER5bmFtaWNJZHMgIT09IHRydWUgPyByZW1vdmVEeW5hbWljSWQodmFsdWUpIDogdmFsdWU7XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgcHJvcGVydGllcyBvZiBhIGNvbnRyb2wgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSBjb250cm9sIFRoZSBjb250cm9sIHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSBjb250cm9sLm1Qcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBjb250cm9sLlxuICogQHBhcmFtIGNvbnRyb2wubUJpbmRpbmdJbmZvcyBUaGUgYmluZGluZyBpbmZvcm1hdGlvbiBvZiB0aGUgY29udHJvbC5cbiAqIEBwYXJhbSB0YWJDb3VudCBUaGUgY3VycmVudCB0YWIgbGV2ZWwgZm9yIGluZGVudGF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5pbmhlcml0ZWRQcm9wZXJ0aWVzIElmIHNldCB0byB0cnVlLCBpbmhlcml0ZWQgcHJvcGVydGllcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5rZWVwRHluYW1pY0lkcyBJZiBzZXQgdG8gdHJ1ZSwgZHluYW1pYyBJRHMgYXJlIG5vdCByZXBsYWNlZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuXG4gKiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVLZXlzIExpc3Qgb2YgcHJvcGVydHkga2V5cyB0byBpZ25vcmUgZHVyaW5nIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVCaW5kaW5nSW5mb0tleXMgTGlzdCBvZiBiaW5kaW5nIGluZm8ga2V5cyB0byBpZ25vcmUgZHVyaW5nIHNlcmlhbGl6YXRpb24uXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udHJvbCdzIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZVByb3BlcnRpZXMoXG5cdGNvbnRyb2w6IENvbnRyb2wsXG5cdHRhYkNvdW50OiBudW1iZXIsXG5cdG9wdGlvbnM/OiB7XG5cdFx0aW5oZXJpdGVkUHJvcGVydGllcz86IGJvb2xlYW47XG5cdFx0a2VlcER5bmFtaWNJZHM/OiBib29sZWFuO1xuXHRcdGlnbm9yZUtleXM/OiBzdHJpbmdbXTtcblx0XHRpZ25vcmVCaW5kaW5nSW5mb0tleXM/OiBzdHJpbmdbXTtcblx0fVxuKTogc3RyaW5nIHtcblx0bGV0IGRhdGEgPSBcIlwiO1xuXHRjb25zdCBpZ25vcmVLZXlzID0gb3B0aW9ucz8uaWdub3JlS2V5cyA/PyBbXTtcblx0Y29uc3Qga2VlcER5bmFtaWNJZHMgPSBvcHRpb25zPy5rZWVwRHluYW1pY0lkcyA9PT0gdHJ1ZTtcblx0Y29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXRBbGxQcm9wZXJ0aWVzKCkpLmZpbHRlcigocHJvcGVydHlLZXkpID0+ICFpZ25vcmVLZXlzLmluY2x1ZGVzKHByb3BlcnR5S2V5KSk7XG5cdHByb3BlcnRpZXMuc29ydCgpO1xuXHRmb3IgKGNvbnN0IHByb3BlcnR5S2V5IG9mIHByb3BlcnRpZXMpIHtcblx0XHRpZiAob3B0aW9ucz8uaW5oZXJpdGVkUHJvcGVydGllcyA9PT0gdHJ1ZSB8fCAhY29udHJvbC5pc1Byb3BlcnR5SW5pdGlhbChwcm9wZXJ0eUtleSkpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSBnZXRQcm9wZXJ0eShjb250cm9sLCBwcm9wZXJ0eUtleSwgeyBrZWVwRHluYW1pY0lkcyB9KTtcblx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYih0YWJDb3VudCl9ICR7cHJvcGVydHlLZXl9OiAke3Byb3BlcnR5VmFsdWV9YDtcblx0XHRcdGlmIChjb250cm9sLmlzQm91bmQocHJvcGVydHlLZXkpICYmICEob3B0aW9ucz8uaWdub3JlQmluZGluZ0luZm9LZXlzID8/IFtdKS5pbmNsdWRlcyhwcm9wZXJ0eUtleSkpIHtcblx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtwcm9wZXJ0eUtleX1fX0JpbmRpbmdJbmZvOiAke2dldEJpbmRpbmdJbmZvKGNvbnRyb2wsIHByb3BlcnR5S2V5LCB7IGtlZXBEeW5hbWljSWRzIH0pfWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGFzc29jaWF0aW9ucyBvZiBhIGNvbnRyb2wgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSBjb250cm9sIFRoZSBjb250cm9sIHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSB0YWJDb3VudCBUaGUgY3VycmVudCB0YWIgbGV2ZWwgZm9yIGluZGVudGF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVLZXlzIExpc3Qgb2YgYXNzb2NpYXRpb24ga2V5cyB0byBpZ25vcmUgZHVyaW5nIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5rZWVwRHluYW1pY0lkcyBJZiBzZXQgdG8gdHJ1ZSwgZHluYW1pYyBJRHMgYXJlIG5vdCByZXBsYWNlZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udHJvbCdzIGFzc29jaWF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplQXNzb2NpYXRpb25zKFxuXHRjb250cm9sOiBDb250cm9sLFxuXHR0YWJDb3VudDogbnVtYmVyLFxuXHRvcHRpb25zPzoge1xuXHRcdGlnbm9yZUtleXM/OiBzdHJpbmdbXTtcblx0XHRrZWVwRHluYW1pY0lkcz86IGJvb2xlYW47XG5cdH1cbik6IHN0cmluZyB7XG5cdGxldCBkYXRhID0gXCJcIjtcblx0Y29uc3Qga2VlcER5bmFtaWNJZHMgPSBvcHRpb25zPy5rZWVwRHluYW1pY0lkcyA9PT0gdHJ1ZTtcblx0Y29uc3QgaWdub3JlS2V5cyA9IG9wdGlvbnM/Lmlnbm9yZUtleXMgPz8gW107XG5cdGNvbnN0IGFzc29jaWF0aW9uS2V5cyA9IE9iamVjdC5rZXlzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXRBbGxBc3NvY2lhdGlvbnMoKSkuZmlsdGVyKChrZXkpID0+ICFpZ25vcmVLZXlzLmluY2x1ZGVzKGtleSkpO1xuXHRhc3NvY2lhdGlvbktleXMuc29ydCgpO1xuXHRmb3IgKGNvbnN0IGFzc29jaWF0aW9uS2V5IG9mIGFzc29jaWF0aW9uS2V5cykge1xuXHRcdGxldCBhc3NvY2lhdGlvblZhbHVlID0gY29udHJvbC5nZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSwgbnVsbCk7XG5cdFx0aWYgKGFzc29jaWF0aW9uVmFsdWUpIHtcblx0XHRcdGlmICghQXJyYXkuaXNBcnJheShhc3NvY2lhdGlvblZhbHVlKSkge1xuXHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gW2Fzc29jaWF0aW9uVmFsdWVdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXNzb2NpYXRpb25WYWx1ZSkgJiYgYXNzb2NpYXRpb25WYWx1ZS5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0YXNzb2NpYXRpb25WYWx1ZSA9IGFzc29jaWF0aW9uVmFsdWUubWFwKChhc3NvY2lhdGlvblZhbHVlRWxlbWVudDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIE1hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50KSAmJiAha2VlcER5bmFtaWNJZHNcblx0XHRcdFx0XHRcdFx0PyBcIl9fZHluYW1pY0lkXCJcblx0XHRcdFx0XHRcdFx0OiByZW1vdmVEeW5hbWljSWQoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHthc3NvY2lhdGlvbktleX06ICR7YXNzb2NpYXRpb25WYWx1ZS5qb2luPy4oXCIsXCIpIHx8IHVuZGVmaW5lZH1gO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBldmVudHMgb2YgYSBjb250cm9sIGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0gY29udHJvbCBUaGUgY29udHJvbCB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0gY29udHJvbC5tRXZlbnRSZWdpc3RyeSBUaGUgZXZlbnRzIG9mIHRoZSBjb250cm9sLlxuICogQHBhcmFtIHRhYkNvdW50IFRoZSBjdXJyZW50IHRhYiBsZXZlbCBmb3IgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzZXR0aW5ncyBmb3Igc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZUtleXMgTGlzdCBvZiBldmVudCBrZXlzIHRvIGlnbm9yZSBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250cm9sJ3MgZXZlbnRzLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVFdmVudHMoXG5cdGNvbnRyb2w6IENvbnRyb2wsXG5cdHRhYkNvdW50OiBudW1iZXIsXG5cdG9wdGlvbnM/OiB7XG5cdFx0aWdub3JlS2V5cz86IHN0cmluZ1tdO1xuXHR9XG4pOiBzdHJpbmcge1xuXHRsZXQgZGF0YSA9IFwiXCI7XG5cdGNvbnN0IGludGVybmFsVUk1RXZlbnRzID0gW1wiRXZlbnRIYW5kbGVyQ2hhbmdlXCIsIFwiX2NoYW5nZVwiXTtcblx0Y29uc3QgaWdub3JlS2V5cyA9IG9wdGlvbnM/Lmlnbm9yZUtleXMgPz8gW107XG5cdGNvbnN0IGV2ZW50SWRzID0gT2JqZWN0LmtleXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldEFsbEV2ZW50cygpKS5jb25jYXQoaW50ZXJuYWxVSTVFdmVudHMpO1xuXHRldmVudElkcy5zb3J0KCk7XG5cdGZvciAoY29uc3QgZXZlbnRLZXkgb2YgZXZlbnRJZHMpIHtcblx0XHRpZiAoY29udHJvbC5oYXNMaXN0ZW5lcnMoZXZlbnRLZXkpICYmICFpZ25vcmVLZXlzLmluY2x1ZGVzKGV2ZW50S2V5KSkge1xuXHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtldmVudEtleX06IHRydWVgO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBcdFNlcmlhbGl6ZXMgYSBVSTUgY29udHJvbCBvciBhbiBhcnJheSBvZiBVSTUgY29udHJvbHMgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSBjb250cm9sVG9TZXJpYWxpemUgVGhlIGNvbnRyb2wgb3IgYXJyYXkgb2YgY29udHJvbHMgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5pbmhlcml0ZWRQcm9wZXJ0aWVzIElmIHNldCB0byB0cnVlLCBpbmhlcml0ZWQgcHJvcGVydGllcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBzZXJpYWxpemF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMuc2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyBJZiBzZXQgdG8gdHJ1ZSwgY3VzdG9tIHN0eWxlIGNsYXNzZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmtlZXBEeW5hbWljSWRzIElmIHNldCB0byB0cnVlLCBkeW5hbWljIElEcyBhcmUgbm90IHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZS5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZUtleXMgTGlzdCBvZiBwcm9wZXJ0eSwgYXNzb2NpYXRpb24sIGFuZCBldmVudCBrZXlzIHRvIGlnbm9yZSBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZUJpbmRpbmdJbmZvS2V5cyBMaXN0IG9mIGJpbmRpbmcgaW5mbyBrZXlzIHRvIGlnbm9yZSBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250cm9sIG9yIGFycmF5IG9mIGNvbnRyb2xzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbChcblx0Y29udHJvbFRvU2VyaWFsaXplPzogVUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXSxcblx0b3B0aW9ucz86IHtcblx0XHRpbmhlcml0ZWRQcm9wZXJ0aWVzPzogYm9vbGVhbjtcblx0XHRzaG93Q3VzdG9tU3R5bGVDbGFzc2VzPzogYm9vbGVhbjtcblx0XHRrZWVwRHluYW1pY0lkcz86IGJvb2xlYW47XG5cdFx0aWdub3JlS2V5cz86IHN0cmluZ1tdO1xuXHRcdGlnbm9yZUJpbmRpbmdJbmZvS2V5cz86IHN0cmluZ1tdO1xuXHR9XG4pOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG5cdGxldCB0YWJDb3VudCA9IDA7XG5cblx0Y29uc3Qga2VlcER5bmFtaWNJZHMgPSBvcHRpb25zPy5rZWVwRHluYW1pY0lkcyA9PT0gdHJ1ZTtcblx0Y29uc3Qgc2VyaWFsaXplRGVsZWdhdGUgPSB7XG5cdFx0c3RhcnQ6IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNBZ2dyZWdhdGlvbk5hbWU6IHN0cmluZykge1xuXHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IGNvbnRyb2wuZ2V0Q3VzdG9tRGF0YT8uKCk7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjdXN0b21EYXRhKSAmJiBjdXN0b21EYXRhLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0Y3VzdG9tRGF0YS5zb3J0KChhLCBiKSA9PiBhLmdldEtleSgpLmxvY2FsZUNvbXBhcmUoYi5nZXRLZXkoKSkpO1xuXHRcdFx0XHRjb250cm9sLnJlbW92ZUFsbEN1c3RvbURhdGEoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBjZCBvZiBjdXN0b21EYXRhKSB7XG5cdFx0XHRcdFx0Y29udHJvbC5hZGRDdXN0b21EYXRhKGNkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGV0IGNvbnRyb2xEZXRhaWwgPSBcIlwiO1xuXHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWUpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wuZ2V0UGFyZW50KCkpIHtcblx0XHRcdFx0XHRjb25zdCBpbmRleEluUGFyZW50ID0gKGNvbnRyb2wuZ2V0UGFyZW50KCkuZ2V0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSkgYXMgTWFuYWdlZE9iamVjdFtdKT8uaW5kZXhPZj8uKGNvbnRyb2wpO1xuXHRcdFx0XHRcdGlmIChpbmRleEluUGFyZW50ID4gMCkge1xuXHRcdFx0XHRcdFx0Y29udHJvbERldGFpbCArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb250cm9sRGV0YWlsICs9IGAke2NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9KGA7XG5cdFx0XHRyZXR1cm4gY29udHJvbERldGFpbDtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFwifSlcIjtcblx0XHR9LFxuXHRcdG1pZGRsZTogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0bGV0IGlkID0gY29udHJvbC5nZXRJZCgpO1xuXHRcdFx0aWQgPSB0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIgPyByZW1vdmVEeW5hbWljSWQoaWQpIDogaWQ7XG5cdFx0XHRsZXQgZGF0YSA9IGB7aWQ6ICR7TWFuYWdlZE9iamVjdE1ldGFkYXRhLmlzR2VuZXJhdGVkSWQoaWQpICYmICFrZWVwRHluYW1pY0lkcyA/IFwiX19keW5hbWljSWRcIiA6IGlkfWA7XG5cdFx0XHRkYXRhICs9IHNlcmlhbGl6ZVByb3BlcnRpZXMoY29udHJvbCwgdGFiQ291bnQsIG9wdGlvbnMpO1xuXHRcdFx0aWYgKGNvbnRyb2wubUFnZ3JlZ2F0aW9ucz8udG9vbHRpcCAmJiB0eXBlb2YgY29udHJvbC5tQWdncmVnYXRpb25zPy50b29sdGlwID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdC8vIGluIGNhc2UgdGVoIHRvb2x0aXAgaXMgc3RvcmVkIGEgcyBzdHJpbmcgdGhlIHNlcmlhbGl6YXRpb24gbmVlZHMgdG8gYmUgZG9uZSBtYW51YWxseVxuXHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIodGFiQ291bnQpfSB0b29sdGlwOiAke2NvbnRyb2wubUFnZ3JlZ2F0aW9ucy50b29sdGlwfWA7XG5cdFx0XHR9XG5cdFx0XHRkYXRhICs9IHNlcmlhbGl6ZUFzc29jaWF0aW9ucyhjb250cm9sLCB0YWJDb3VudCwgb3B0aW9ucyk7XG5cdFx0XHRpZiAob3B0aW9ucz8uc2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyA9PT0gdHJ1ZSAmJiBjb250cm9sLmFDdXN0b21TdHlsZUNsYXNzZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gY3VzdG9tU3R5bGVDbGFzc2VzIDogJHtjb250cm9sLmFDdXN0b21TdHlsZUNsYXNzZXMuam9pbihcIiwgXCIpfWA7XG5cdFx0XHR9XG5cdFx0XHRkYXRhICs9IHNlcmlhbGl6ZUV2ZW50cyhjb250cm9sLCB0YWJDb3VudCwgb3B0aW9ucyk7XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9LFxuXHRcdHN0YXJ0QWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiB7IG1CaW5kaW5nSW5mb3M6IFJlY29yZDxzdHJpbmcsIEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvPiB9LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgb3V0ID0gYCxcXG4ke2dldFRhYih0YWJDb3VudCl9JHtzTmFtZX1gO1xuXHRcdFx0dGFiQ291bnQrKztcblxuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0b3V0ICs9IGA9eyBwYXRoOicke2NvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0ucGF0aH0nLCB0ZW1wbGF0ZTpcXG4ke2dldFRhYih0YWJDb3VudCl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dCArPSBgPVtcXG4ke2dldFRhYih0YWJDb3VudCl9YDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvdXQ7XG5cdFx0fSxcblx0XHRlbmRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0dGFiQ291bnQtLTtcblx0XHRcdGlmIChjb250cm9sLm1CaW5kaW5nSW5mb3Nbc05hbWVdKSB7XG5cdFx0XHRcdHJldHVybiBgXFxuJHtnZXRUYWIodGFiQ291bnQpfX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYih0YWJDb3VudCl9XWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xUb1NlcmlhbGl6ZS5tYXAoKGNvbnRyb2xUb1JlbmRlcjogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1JlbmRlciwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9TZXJpYWxpemUsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbEFzWE1MKFxuXHRjb250cm9sVG9TZXJpYWxpemU/OiBNYW5hZ2VkT2JqZWN0IHwgTWFuYWdlZE9iamVjdFtdIHwgbnVsbCxcblx0c2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyA9IGZhbHNlLFxuXHRwcmVmZXJWYWx1ZSA9IGZhbHNlLFxuXHRpZ25vcmVLZXlzOiBzdHJpbmdbXSA9IFtdXG4pIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblx0Y29uc3QgZGVmaW5lZE5hbWVzcGFjZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuXHRmdW5jdGlvbiBnZXROYW1lc3BhY2VBbGlhcyhjbGFzc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbmFtZXNTcGxpdCA9IGNsYXNzTmFtZS5zcGxpdChcIi5cIik7XG5cdFx0Y29uc3QgbmFtZXNwYWNlID0gbmFtZXNTcGxpdC5zbGljZSgwLCAtMSk7XG5cdFx0bGV0IG5hbWVzcGFjZUFsaWFzID0gbmFtZXNwYWNlW25hbWVzcGFjZS5sZW5ndGggLSAxXTtcblx0XHRpZiAocmV2ZXNlTmFtZXNwYWNlTWFwW25hbWVzcGFjZS5qb2luKFwiLlwiKV0pIHtcblx0XHRcdG5hbWVzcGFjZUFsaWFzID0gcmV2ZXNlTmFtZXNwYWNlTWFwW25hbWVzcGFjZS5qb2luKFwiLlwiKV07XG5cdFx0fVxuXHRcdGlmIChuYW1lc3BhY2VBbGlhcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRuYW1lc3BhY2VBbGlhcyA9IFwidGVzdFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZXNwYWNlQWxpYXM7XG5cdH1cblxuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pPy5pbmRleE9mPy4oY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IG5hbWVGdWxsID0gY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKTtcblx0XHRcdGNvbnN0IG5hbWVzU3BsaXQgPSBuYW1lRnVsbC5zcGxpdChcIi5cIik7XG5cdFx0XHRjb25zdCBuYW1lID0gbmFtZXNTcGxpdFtuYW1lc1NwbGl0Lmxlbmd0aCAtIDFdO1xuXHRcdFx0Y29uc3QgbmFtZXNwYWNlQWxpYXMgPSBnZXROYW1lc3BhY2VBbGlhcyhuYW1lRnVsbCk7XG5cdFx0XHRjb250cm9sRGV0YWlsICs9IGA8JHtuYW1lc3BhY2VBbGlhc306JHtuYW1lfVxcbmA7XG5cdFx0XHRpZiAoIWRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXSkge1xuXHRcdFx0XHRkZWZpbmVkTmFtZXNwYWNlc1tuYW1lc3BhY2VBbGlhc10gPSAxO1xuXHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAke2dldFRhYih0YWJDb3VudCl9eG1sbnM6JHtuYW1lc3BhY2VBbGlhc309XCIke25hbWVTcGFjZU1hcFtuYW1lc3BhY2VBbGlhc119XCJcXG5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdKys7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29udHJvbERldGFpbDtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0Y29uc3QgbmFtZUZ1bGwgPSBjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdFx0Y29uc3QgbmFtZXNTcGxpdCA9IG5hbWVGdWxsLnNwbGl0KFwiLlwiKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKG5hbWVGdWxsKTtcblx0XHRcdGxldCBoYXNBZ2dyZWdhdGlvbiA9IGZhbHNlO1xuXHRcdFx0Zm9yIChjb25zdCBtQWdncmVnYXRpb25zS2V5IGluIGNvbnRyb2wubUFnZ3JlZ2F0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KCFBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSB1bmRlZmluZWQpIHx8XG5cdFx0XHRcdFx0KEFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJiBjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0ubGVuZ3RoID4gMClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aGFzQWdncmVnYXRpb24gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkZWZpbmVkTmFtZXNwYWNlc1tuYW1lc3BhY2VBbGlhc10tLTtcblx0XHRcdGlmIChoYXNBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gYDwvJHtuYW1lc3BhY2VBbGlhc306JHtuYW1lfT5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGAvPmA7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBpZCA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGlkID0gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gcmVtb3ZlRHluYW1pY0lkKGlkKSA6IGlkO1xuXHRcdFx0bGV0IGRhdGEgPSBcIlwiO1xuXHRcdFx0aWYgKCFNYW5hZ2VkT2JqZWN0TWV0YWRhdGEuaXNHZW5lcmF0ZWRJZChpZCkpIHtcblx0XHRcdFx0ZGF0YSA9IGBpZD1cIiR7aWR9XCJgO1xuXHRcdFx0fVxuXHRcdFx0bGV0IGtleXMgPSBPYmplY3Qua2V5cyhjb250cm9sLm1Qcm9wZXJ0aWVzKVxuXHRcdFx0XHQuZmlsdGVyKChwcm9wTmFtZSkgPT4gcHJvcE5hbWUgIT09IFwiaWRcIilcblx0XHRcdFx0LmNvbmNhdChPYmplY3Qua2V5cyhjb250cm9sLm1CaW5kaW5nSW5mb3MpKVxuXHRcdFx0XHQuY29uY2F0KE9iamVjdC5rZXlzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXRBbGxBc3NvY2lhdGlvbnMoKSkpXG5cdFx0XHRcdC5jb25jYXQoT2JqZWN0LmtleXMoY29udHJvbC5tRXZlbnRSZWdpc3RyeSkpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BOYW1lKSA9PiAhaWdub3JlS2V5cy5pbmNsdWRlcyhwcm9wTmFtZSkpO1xuXHRcdFx0a2V5cyA9IGtleXMuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcblx0XHRcdGNvbnN0IHVuaXF1ZUtleXMgPSBuZXcgU2V0KGtleXMpO1xuXHRcdFx0a2V5cyA9IEFycmF5LmZyb20odW5pcXVlS2V5cyk7XG5cdFx0XHRmb3IgKGNvbnN0IG9Db250cm9sS2V5IG9mIGtleXMpIHtcblx0XHRcdFx0aWYgKCFwcmVmZXJWYWx1ZSAmJiBjb250cm9sLm1CaW5kaW5nSW5mb3MuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgYmluZGluZ0RldGFpbCA9IHsgLi4uY29udHJvbC5tQmluZGluZ0luZm9zW29Db250cm9sS2V5XSB9O1xuXHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLmJpbmRpbmdTdHJpbmcpIHtcblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0ke29Db250cm9sS2V5fT1cIiR7YmluZGluZ0RldGFpbC5iaW5kaW5nU3RyaW5nLnJlcGxhY2UoXCI+XCIsIFwiJmd0O1wiKX1cImA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLnR5cGU/Lm9PdXRwdXRGb3JtYXQpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwudHlwZS5vT3V0cHV0Rm9ybWF0O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLmJpbmRpbmc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC50ZW1wbGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50ZW1wbGF0ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0ke29Db250cm9sS2V5fT0nJHtKU09OLnN0cmluZ2lmeShiaW5kaW5nRGV0YWlsKX0nYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkgJiYgY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gcmVtb3ZlRHluYW1pY0lkKHByb3BlcnR5VmFsdWUpLnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSkucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIikgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBidXQgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9ICR7b0NvbnRyb2xLZXl9PVwiJHtwcm9wZXJ0eVZhbHVlfVwiYDtcblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmdldEFzc29jaWF0aW9uKG9Db250cm9sS2V5LCBudWxsKSkge1xuXHRcdFx0XHRcdGxldCBhc3NvY2lhdGlvblZhbHVlID0gY29udHJvbC5nZXRBc3NvY2lhdGlvbihvQ29udHJvbEtleSwgbnVsbCk7XG5cdFx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gW2Fzc29jaWF0aW9uVmFsdWVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gYXNzb2NpYXRpb25WYWx1ZS5tYXAoKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0eXBlb2YgYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHRcdFx0PyByZW1vdmVEeW5hbWljSWQoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQpXG5cdFx0XHRcdFx0XHRcdDogYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9ICR7b0NvbnRyb2xLZXl9PVwiJHsoYXNzb2NpYXRpb25WYWx1ZT8uam9pbj8uKFwiLFwiKSA/PyBhc3NvY2lhdGlvblZhbHVlKSB8fCB1bmRlZmluZWR9XCJgO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubUV2ZW50UmVnaXN0cnkuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2wubUV2ZW50UmVnaXN0cnlbb0NvbnRyb2xLZXldWzBdPy5mRnVuY3Rpb24/Lm5hbWUpIHtcblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtvQ29udHJvbEtleX09XCIke2NvbnRyb2wubUV2ZW50UmVnaXN0cnlbb0NvbnRyb2xLZXldWzBdPy5mRnVuY3Rpb24/Lm5hbWV9XCJgO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9ICR7b0NvbnRyb2xLZXl9PVwic29tZUV2ZW50SGFuZGxlclwiYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChzaG93Q3VzdG9tU3R5bGVDbGFzc2VzICYmIGNvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9IGN1c3RvbVN0eWxlQ2xhc3NlcyA6ICR7Y29udHJvbC5hQ3VzdG9tU3R5bGVDbGFzc2VzLmpvaW4oXCIsIFwiKX1gO1xuXHRcdFx0fVxuXHRcdFx0ZGF0YSArPSBgXFxuYDtcblx0XHRcdGxldCBoYXNBZ2dyZWdhdGlvbiA9IGZhbHNlO1xuXHRcdFx0Zm9yIChjb25zdCBtQWdncmVnYXRpb25zS2V5IGluIGNvbnRyb2wubUFnZ3JlZ2F0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KCFBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSB1bmRlZmluZWQpIHx8XG5cdFx0XHRcdFx0KEFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJiBjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0ubGVuZ3RoID4gMClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aGFzQWdncmVnYXRpb24gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoaGFzQWdncmVnYXRpb24pIHtcblx0XHRcdFx0ZGF0YSArPSBcIj5cIjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH0sXG5cdFx0c3RhcnRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0Y29uc3QgbmFtZXNwYWNlQWxpYXMgPSBnZXROYW1lc3BhY2VBbGlhcyhjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKTtcblx0XHRcdGxldCBvdXQgPSBgXFxuJHtnZXRUYWIodGFiQ291bnQpfTwke25hbWVzcGFjZUFsaWFzfToke3NOYW1lfT5gO1xuXHRcdFx0dGFiQ291bnQrKztcblx0XHRcdG91dCArPSBgXFxuJHtnZXRUYWIodGFiQ291bnQpfWA7XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYih0YWJDb3VudCl9PC8ke25hbWVzcGFjZUFsaWFzfToke3NOYW1lfT5cXG5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYih0YWJDb3VudCl9PC8ke25hbWVzcGFjZUFsaWFzfToke3NOYW1lfT5cXG5gO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0bGV0IG91dFhNTDtcblx0aWYgKEFycmF5LmlzQXJyYXkoY29udHJvbFRvU2VyaWFsaXplKSkge1xuXHRcdG91dFhNTCA9IGNvbnRyb2xUb1NlcmlhbGl6ZS5tYXAoKGNvbnRyb2xUb1JlbmRlcjogTWFuYWdlZE9iamVjdCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1JlbmRlciwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG91dFhNTCA9IG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1NlcmlhbGl6ZSwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHR9XG5cdHJldHVybiBmb3JtYXRYTUwoYDxyb290PiR7b3V0WE1MfTwvcm9vdD5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF3YWl0ZXIoKSB7XG5cdGxldCBmblJlc29sdmUhOiBGdW5jdGlvbjtcblx0Y29uc3QgbXlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRmblJlc29sdmUgPSByZXNvbHZlO1xuXHR9KTtcblx0cmV0dXJuIHsgcHJvbWlzZTogbXlQcm9taXNlLCByZXNvbHZlOiBmblJlc29sdmUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTW9ja0ZyYWdtZW50cyguLi5mcmFnbWVudHM6IE1vY2tGcmFnbWVudFtdKTogamVzdC5TcHlJbnN0YW5jZSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdGNvbnN0IG9yaWdpbmFsTG9hZFRlbXBsYXRlID0gKFhNTFRlbXBsYXRlUHJvY2Vzc29yIGFzIGFueSkubG9hZFRlbXBsYXRlUHJvbWlzZTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3QgbG9hZFRlbXBsYXRlU3R1YiA9IGplc3Quc3B5T24oWE1MVGVtcGxhdGVQcm9jZXNzb3IgYXMgYW55LCBcImxvYWRUZW1wbGF0ZVByb21pc2VcIik7XG5cdGxvYWRUZW1wbGF0ZVN0dWIubW9ja0ltcGxlbWVudGF0aW9uKCgodGVtcGxhdGVOYW1lOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGlmIChmcmFnbWVudC5uYW1lID09PSB0ZW1wbGF0ZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlWE1MU3RyaW5nKGZyYWdtZW50LmNvbnRlbnQpWzBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3JpZ2luYWxMb2FkVGVtcGxhdGUodGVtcGxhdGVOYW1lLCBleHRlbnNpb24pO1xuXHR9KSBhcyAoKCkgPT4gRWxlbWVudCkgfCB1bmRlZmluZWQpO1xuXHRyZXR1cm4gbG9hZFRlbXBsYXRlU3R1Yjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGFuIGFwcENvbXBvbmVudCBhbmQgdGVtcGxhdGVDb21wb25lbnQgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucy5jZHNGaWxlIFRoZSBwYXRoIHRvIHRoZSBDRFMgZmlsZSB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLm1haW5Db250ZXh0UGF0aCBUaGUgbWFpbiBjb250ZXh0IHBhdGggdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5wYWdlQ29udGVudCBUaGUgcGFnZSBjb250ZW50IHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMuY29udGVudCBUaGUgY29udGVudCB0byB1c2UgZm9yIHRoZSBhcHAgQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5jb21wb25lbnRJZFxuICogQHBhcmFtIG9wdGlvbnMubWFuaWZlc3RTZXR0aW5nc1xuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gdmlld0xldmVsIFRoZSB2aWV3IGxldmVsIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHJldHVybnMgVGhlIGFwcGNvbXBvbmVudCBhbmQgdGVtcGxhdGVDb21wb25lbnQgdG8gdXNlIGZvciB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplQXBwQ29tcG9uZW50KFxuXHRvcHRpb25zPzoge1xuXHRcdGNkc0ZpbGU/OiBzdHJpbmc7XG5cdFx0Y29tcG9uZW50SWQ/OiBzdHJpbmc7XG5cdFx0bWFpbkNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRcdHBhZ2VDb250ZW50PzogRnVuY3Rpb247XG5cdFx0bWFuaWZlc3RTZXR0aW5ncz86IFBhcnRpYWw8TGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncz47XG5cdFx0ZmVNYW5pZmVzdFNldHRpbmdzPzogUGFydGlhbDxNYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0+O1xuXHRcdGNvbnRlbnQ/OiBQYXJ0aWFsPExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzW1wiY29udGVudFwiXSB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzW1wiY29udGVudFwiXT47XG5cdFx0Z3VpZD86IHN0cmluZztcblx0fSxcblx0bmFtZT86IHN0cmluZyxcblx0dmlld0xldmVsPzogbnVtYmVyXG4pOiBQcm9taXNlPHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IHRlbXBsYXRlQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCB9PiB7XG5cdGplc3Quc3B5T24oT0RhdGFNb2RlbC5wcm90b3R5cGUsIFwic2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclwiKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKTtcblx0bGV0IGNkc0ZpbGUgPSBvcHRpb25zPy5jZHNGaWxlO1xuXHRpZiAoIWNkc0ZpbGUpIHtcblx0XHRjZHNGaWxlID0gY29tcGlsZUNEUyhwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4vZGF0YS9Qcm9kdWN0cy5jZHNcIikpO1xuXHR9XG5cdGNvbnN0IGd1aWQgPSBvcHRpb25zPy5ndWlkID8/IHVpZCgpO1xuXHRjb25zdCBpZCA9IG9wdGlvbnM/LmNvbXBvbmVudElkID8/IGBzYXAuZmUudGVzdC4ke2d1aWR9YDtcblx0Y29uc3QgY2RzQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhjZHNGaWxlKS50b1N0cmluZygpO1xuXHR3aW5kb3cuamVzdFVJNS5tb2NrVXJsKGAvc2FwL2ZlL2NvcmUvbW9jay8ke2d1aWR9LyRtZXRhZGF0YT9zYXAtbGFuZ3VhZ2U9RU5gLCBjZHNDb250ZW50KTtcblx0aWYgKCFvcHRpb25zPy5wYWdlQ29udGVudCkge1xuXHRcdGplc3Quc3B5T24oUGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLCBcIl9vbkludGVybmFsQWZ0ZXJCaW5kaW5nXCIpLm1vY2tJbXBsZW1lbnRhdGlvbihqZXN0LmZuKCkpO1xuXHR9XG5cdGNsYXNzIERlZmF1bHRQYWdlQ29udGVudCBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0XHRyZW5kZXIoKSB7XG5cdFx0XHRyZXR1cm4gPFBhZ2U+PC9QYWdlPjtcblx0XHR9XG5cdH1cblx0c2FwLnVpLmRlZmluZShgc2FwL2ZlL3Rlc3QvJHtndWlkfS9Db21wb25lbnRgLCBbXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIl0sIGZ1bmN0aW9uIChfQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRcInVzZSBzdHJpY3RcIjtcblxuXHRcdHJldHVybiBBcHBDb21wb25lbnQuZXh0ZW5kKGBzYXAuZmUudGVzdC4ke2d1aWR9LkNvbXBvbmVudGAsIHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdG1hbmlmZXN0OiB7XG5cdFx0XHRcdFx0XCJzYXAuYXBwXCI6IHtcblx0XHRcdFx0XHRcdGlkOiBgdGVzdCR7Z3VpZH1gLFxuXHRcdFx0XHRcdFx0dGl0bGU6IFwiQXBwIFRpdGxlXCIsXG5cdFx0XHRcdFx0XHRkYXRhU291cmNlczoge1xuXHRcdFx0XHRcdFx0XHRtYWluU2VydmljZToge1xuXHRcdFx0XHRcdFx0XHRcdHVyaTogYC9zYXAvZmUvY29yZS9tb2NrLyR7Z3VpZH0vYCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIk9EYXRhXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdFx0XHRcdG9kYXRhVmVyc2lvbjogXCI0LjBcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJzYXAudWk1XCI6IHtcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHRcIlwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YVNvdXJjZTogXCJtYWluU2VydmljZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzOiB7fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0cm91dGluZzoge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRzOiB7XG5cdFx0XHRcdFx0XHRcdFx0RGVmYXVsdDoge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJDb21wb25lbnRcIixcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IG5hbWUgPz8gXCJzYXAuZmUuY29yZS5mcG1cIixcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBcIkRlZmF1bHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZpZXdMZXZlbDogdmlld0xldmVsLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC4uLihvcHRpb25zPy5tYW5pZmVzdFNldHRpbmdzID8/IHt9KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogb3B0aW9ucz8ubWFpbkNvbnRleHRQYXRoID8/IFwiL1Byb2R1Y3RzXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlld1R5cGU6IFwiSlNYXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlld0NvbnRlbnQ6IG9wdGlvbnM/LnBhZ2VDb250ZW50ID8/IERlZmF1bHRQYWdlQ29udGVudCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBvcHRpb25zPy5jb250ZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHJvdXRlczogW1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IFwiOj9xdWVyeTpcIixcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0OiBcIkRlZmF1bHRcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJzYXAuZmVcIjogb3B0aW9ucz8uZmVNYW5pZmVzdFNldHRpbmdzID8/IHt9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cdGplc3Quc3B5T24oRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlLnByb3RvdHlwZSwgXCJnZXRDYXBhYmlsaXRpZXNcIikubW9ja1JldHVyblZhbHVlKERlZmF1bHRFbnZpcm9ubWVudENhcGFiaWxpdGllcyk7XG5cdGNvbnN0IG1vY2tBcHBDb21wb25lbnQgPSAoYXdhaXQgQ29tcG9uZW50LmNyZWF0ZSh7IG5hbWU6IGBzYXAuZmUudGVzdC4ke2d1aWR9YCwgaWQ6IGlkIH0pKSBhcyBBcHBDb21wb25lbnQ7XG5cblx0YXdhaXQgbW9ja0FwcENvbXBvbmVudC5pbml0aWFsaXplZDtcblx0Y29uc3QgdiA9IGF3YWl0IChtb2NrQXBwQ29tcG9uZW50LmdldFJvdXRlcigpLmdldFRhcmdldChcIkRlZmF1bHRcIikgYXMgeyBsb2FkPzogRnVuY3Rpb24gfSkubG9hZD8uKCk7XG5cdHJldHVybiB7IGFwcENvbXBvbmVudDogbW9ja0FwcENvbXBvbmVudCwgdGVtcGxhdGVDb21wb25lbnQ6IHYub2JqZWN0IH07XG59XG5cbi8qKlxuICogRmluZCBhbiBlbGVtZW50IGluIGEgY29sbGVjdGlvbiB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHNlbGVjdG9yLlxuICogQHBhcmFtIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBzZWxlY3RvclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3RvciBvciB1bmRlZmluZWQgaWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVsZW1lbnQoY29sbGVjdGlvbjogSFRNTENvbGxlY3Rpb24sIHNlbGVjdG9yOiAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGJvb2xlYW4pOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY29sbGVjdGlvbi5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBjb2xsZWN0aW9uLml0ZW0oaSkgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0aWYgKHNlbGVjdG9yKGVsZW1lbnQpKSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXYWl0IGZvciBhbiBldmVudCB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZy5cbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gZXZlbnROYW1lXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBldmVudCBpcyByZWNlaXZlZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckV2ZW50PFQgZXh0ZW5kcyB7fT4oY29udHJvbDogRXZlbnRQcm92aWRlciwgZXZlbnROYW1lOiBzdHJpbmcpOiBQcm9taXNlPFVJNUV2ZW50PFQ+PiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGNvbnRyb2wuYXR0YWNoRXZlbnRPbmNlKGV2ZW50TmFtZSwgKGV2ZW50OiBFdmVudCkgPT4ge1xuXHRcdFx0cmVzb2x2ZShldmVudCBhcyB1bmtub3duIGFzIFVJNUV2ZW50PFQ+KTtcblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogVGVsbCB0aGUgYmluZGluZyBwYXJzZXIgdG8ga2VlcCB0aGUgYmluZGluZyBzdHJpbmdzIGZvciB0ZXN0aW5nLlxuICogQHBhcmFtIGVuYWJsZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlZXBCaW5kaW5nU3RyaW5nRm9yVGVzdChlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG5cdEJpbmRpbmdQYXJzZXIuX2tlZXBCaW5kaW5nU3RyaW5ncyA9IGVuYWJsZWQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheUZvcihkZWxheTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpO1xuXHR9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMkVBQSxHQUFHLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEVBQVMsa0NBQWtDLENBQUM7RUFDMURDLElBQUksQ0FBQ0MsVUFBVSxDQUFDLEtBQUssQ0FBQztFQUV0QixNQUFNQyxZQUFvQyxHQUFHO0lBQzVDQyxLQUFLLEVBQUUsZUFBZTtJQUN0QkMsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQ0MsTUFBTSxFQUFFLGVBQWU7SUFDdkJDLElBQUksRUFBRSx1Q0FBdUM7SUFDN0NDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakNDLFNBQVMsRUFBRSxrRUFBa0U7SUFDN0VDLEdBQUcsRUFBRSxrRUFBa0U7SUFDdkVDLFVBQVUsRUFBRSxrRUFBa0U7SUFDOUVDLE9BQU8sRUFBRSxzQkFBc0I7SUFDL0JDLFFBQVEsRUFBRSx3QkFBd0I7SUFDbENDLElBQUksRUFBRSxhQUFhO0lBQ25CQyxFQUFFLEVBQUUsV0FBVztJQUNmQyxDQUFDLEVBQUUsT0FBTztJQUNWQyxDQUFDLEVBQUUsb0JBQW9CO0lBQ3ZCQyxFQUFFLEVBQUUsV0FBVztJQUNmQyxhQUFhLEVBQUUsd0JBQXdCO0lBQ3ZDQyxHQUFHLEVBQUUsWUFBWTtJQUNqQkMsYUFBYSxFQUFFLDBCQUEwQjtJQUN6Q0MsUUFBUSxFQUFFLGtCQUFrQjtJQUM1QkMsUUFBUSxFQUFFLGtCQUFrQjtJQUM1QkMsQ0FBQyxFQUFFLGdCQUFnQjtJQUNuQkMsSUFBSSxFQUFFLFVBQVU7SUFDaEJDLGVBQWUsRUFBRSwwQkFBMEI7SUFDM0NDLFVBQVUsRUFBRSx5QkFBeUI7SUFDckNDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakNDLEtBQUssRUFBRSw4QkFBOEI7SUFDckNDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJDLFNBQVMsRUFBRSx5QkFBeUI7SUFDcENDLGVBQWUsRUFBRSwrQkFBK0I7SUFDaERDLFNBQVMsRUFBRSx5QkFBeUI7SUFDcENDLGNBQWMsRUFBRSw4QkFBOEI7SUFDOUNDLFlBQVksRUFBRSw2QkFBNkI7SUFDM0NDLFNBQVMsRUFBRTtFQUNaLENBQUM7RUFDRCxNQUFNQyxrQkFBa0IsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUNwQyxZQUFZLENBQUMsQ0FBQ3FDLE1BQU0sQ0FBQyxDQUFDQyxVQUFrQyxFQUFFQyxXQUFXLEtBQUs7SUFDaEhELFVBQVUsQ0FBQ3RDLFlBQVksQ0FBQ3VDLFdBQVcsQ0FBQyxDQUFDLEdBQUdBLFdBQVc7SUFDbkQsT0FBT0QsVUFBVTtFQUNsQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDTixNQUFNRSxNQUFNLEdBQUdDLEtBQUssQ0FBQ0MsYUFBYSxDQUFDMUMsWUFBWSxDQUFDO0VBRWhELE1BQU0yQyw0QkFBNEIsR0FBRztJQUFFQyxvQkFBb0IsRUFBRUEsQ0FBQSxLQUFNO0VBQUcsQ0FBQztFQUV2RSxTQUFTQyxxQkFBcUJBLENBQUNDLE1BQVksRUFBRUMsUUFBZ0IsRUFBVTtJQUN0RTtBQUNEO0FBQ0E7QUFDQTtJQUNDLE1BQU1DLFFBQVEsR0FBRyxPQUFPO0lBQ3hCLE9BQU8sR0FBR0YsTUFBTSxDQUFDRyxRQUFRLEtBQUssTUFBTSxJQUFJLENBQUNGLFFBQVEsQ0FBQ0csVUFBVSxDQUFDRixRQUFRLENBQUMsR0FBR0EsUUFBUSxHQUFHLEVBQUUsR0FBR0QsUUFBUSxFQUFFO0VBQ3BHO0VBRUEsZUFBZUksMEJBQTBCQSxDQUN4Q0MsWUFBZ0MsRUFDaENDLGdCQUF5QyxFQUN6Q0MsT0FBNkIsRUFDN0JDLHFCQUErQixFQUNLO0lBQ3BDLElBQUlDLFVBQXNDO0lBQzFDLElBQUlKLFlBQVksRUFBRTtNQUNqQkksVUFBVSxHQUFHLE1BQU1DLFlBQVksQ0FBQ0wsWUFBWSxDQUFDO01BQzdDO01BQ0E7TUFDQSxJQUFJLENBQUNFLE9BQU8sQ0FBQ0ksY0FBYyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7UUFDaERKLE9BQU8sR0FBR25CLE1BQU0sQ0FBQ3dCLE1BQU0sQ0FBQ0wsT0FBTyxFQUFFO1VBQUVNLGdCQUFnQixFQUFFLElBQUlDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRUwsVUFBVztRQUFFLENBQUMsQ0FBQztNQUMzRjtNQUVBckIsTUFBTSxDQUFDQyxJQUFJLENBQUNrQixPQUFPLENBQUMsQ0FBQ1EsT0FBTyxDQUFDLFVBQVVDLFVBQVUsRUFBRTtRQUNsRCxJQUFJVCxPQUFPLENBQUNTLFVBQVUsQ0FBQyxJQUFJVCxPQUFPLENBQUNTLFVBQVUsQ0FBQyxDQUFDQyxlQUFlLEVBQUU7VUFDL0RWLE9BQU8sQ0FBQ1MsVUFBVSxDQUFDLEdBQUcsSUFBSUYsYUFBYSxDQUFDUCxPQUFPLENBQUNTLFVBQVUsQ0FBQyxDQUFDRSxJQUFJLEVBQUVULFVBQVcsQ0FBQztRQUMvRTtNQUNELENBQUMsQ0FBQztJQUNIO0lBRUEsTUFBTVUsUUFBYSxHQUFHO01BQ3JCQyxNQUFNLEVBQUVoQyxNQUFNLENBQUN3QixNQUFNLENBQ3BCO1FBQ0NTLFNBQVMsRUFBRVo7TUFDWixDQUFDLEVBQ0RGLE9BQ0QsQ0FBQztNQUNEZSxlQUFlLEVBQUUsQ0FBQyxDQUFDO01BQ25CQyxZQUFZLEVBQUU7UUFDYkMsaUJBQWlCLEVBQUVBLENBQUEsTUFBTztVQUN6QkMscUJBQXFCLEVBQUUxRSxJQUFJLENBQUMyRSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDO1FBQ0ZDLHFCQUFxQixFQUFFNUUsSUFBSSxDQUFDMkUsRUFBRSxDQUFDLENBQUM7UUFDaENFLGNBQWMsRUFBRUEsQ0FBQSxLQUFNQyxTQUFTO1FBQy9CQyxnQkFBZ0IsRUFBRS9FLElBQUksQ0FBQzJFLEVBQUUsQ0FBQyxDQUFDO1FBQzNCSyxnQkFBZ0IsRUFBRUEsQ0FBQSxLQUFNRjtNQUN6QjtJQUNELENBQUM7SUFFRFYsUUFBUSxDQUFDSSxZQUFZLENBQUNJLHFCQUFxQixDQUFDSyxlQUFlLENBQUN4QixxQkFBcUIsSUFBSVosNEJBQTRCLENBQUM7SUFDbEg7SUFDQVIsTUFBTSxDQUFDQyxJQUFJLENBQUNpQixnQkFBZ0IsQ0FBQyxDQUFDUyxPQUFPLENBQUMsVUFBVWtCLElBQUksRUFBRTtNQUNyRDtNQUNBQyxNQUFNLENBQUMsT0FBT3pCLFVBQVUsRUFBRTBCLFNBQVMsQ0FBQzdCLGdCQUFnQixDQUFDMkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDRyxXQUFXLENBQUMsQ0FBQztNQUMxRSxNQUFNQyxNQUFNLEdBQUc5QixPQUFPLENBQUMwQixJQUFJLENBQUMsSUFBSXhCLFVBQVU7TUFDMUNVLFFBQVEsQ0FBQ0csZUFBZSxDQUFDVyxJQUFJLENBQUMsR0FBR0ksTUFBTSxDQUFDQyxvQkFBb0IsQ0FBQ2hDLGdCQUFnQixDQUFDMkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3RGZCxRQUFRLENBQUNDLE1BQU0sQ0FBQ2EsSUFBSSxDQUFDLEdBQUdJLE1BQU07SUFDL0IsQ0FBQyxDQUFDO0lBQ0YsT0FBT2xCLFFBQVE7RUFDaEI7RUFFQSxTQUFTb0IsaUJBQWlCQSxDQUFDQyxRQUFnQixFQUFXO0lBQ3JELE1BQU1DLElBQUksR0FBR0QsUUFBUSxDQUFDRSxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFdBQVc7SUFDdkQsTUFBTUMsSUFBSSxHQUFHQyxnQkFBZ0IsQ0FBQ0MsWUFBWSxDQUFDSixJQUFJLENBQUM7SUFDaEQsT0FBT0UsSUFBSSxDQUFDRyxlQUFlO0VBQzVCO0VBRU8sTUFBTUMsYUFBYSxHQUFHLFNBQUFBLENBQVUvQyxRQUFnQixFQUFFRCxNQUF3QixFQUFFO0lBQ2xGLE9BQU9OLE1BQU0sQ0FBQ08sUUFBUSxFQUFFRCxNQUFNLENBQUM7RUFDaEMsQ0FBQztFQUVEbUMsTUFBTSxDQUFDYyxNQUFNLENBQUM7SUFDYkMsYUFBYUEsQ0FBQ2xELE1BQU0sRUFBRUMsUUFBUSxFQUFFO01BQy9CLE1BQU1rRCxLQUFLLEdBQUdILGFBQWEsQ0FBQ2pELHFCQUFxQixDQUFDQyxNQUFNLEVBQUVDLFFBQVEsQ0FBQyxFQUFFRCxNQUFNLENBQUM7TUFDNUUsT0FBTztRQUNOb0QsT0FBTyxFQUFFQSxDQUFBLEtBQU07VUFDZCxNQUFNQyxTQUFTLEdBQUdDLFlBQVksQ0FBQ3RELE1BQU0sQ0FBQztVQUN0QyxPQUFPLGtDQUFrQ0MsUUFBUSx3QkFBd0JvRCxTQUFTLEVBQUU7UUFDckYsQ0FBQztRQUNERSxJQUFJLEVBQUVKLEtBQUssSUFBSUEsS0FBSyxDQUFDSyxNQUFNLElBQUk7TUFDaEMsQ0FBQztJQUNGLENBQUM7SUFDREMsZ0JBQWdCQSxDQUFDekQsTUFBTSxFQUFFQyxRQUFRLEVBQUU7TUFDbEMsTUFBTWtELEtBQUssR0FBR0gsYUFBYSxDQUFDakQscUJBQXFCLENBQUNDLE1BQU0sRUFBRUMsUUFBUSxDQUFDLEVBQUVELE1BQU0sQ0FBQztNQUM1RSxPQUFPO1FBQ05vRCxPQUFPLEVBQUVBLENBQUEsS0FBTTtVQUNkLE1BQU1DLFNBQVMsR0FBR0MsWUFBWSxDQUFDdEQsTUFBTSxDQUFDO1VBQ3RDLE9BQU8sK0JBQStCQyxRQUFRLHdCQUF3Qm9ELFNBQVMsRUFBRTtRQUNsRixDQUFDO1FBQ0RFLElBQUksRUFBRUosS0FBSyxJQUFJQSxLQUFLLENBQUNLLE1BQU0sS0FBSztNQUNqQyxDQUFDO0lBQ0YsQ0FBQztJQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDRSxzQkFBc0JBLENBQUNDLEdBQWtCLEVBQUU7TUFDMUMsTUFBTUMsT0FBTyxHQUFHLE9BQU9ELEdBQUcsS0FBSyxRQUFRLEdBQUdBLEdBQUcsR0FBR0wsWUFBWSxDQUFDSyxHQUFHLENBQUM7TUFDakUsTUFBTUUsYUFBdUIsR0FBR0QsT0FBTyxDQUFDRSxLQUFLLENBQUMsa0NBQWtDLENBQUMsSUFBSyxFQUFlO01BQ3JHLE1BQU1DLGFBQXVCLEdBQUdGLGFBQWEsQ0FBQ0csR0FBRyxDQUFFWixPQUFlLElBQUs7UUFDdEUsSUFBSUEsT0FBTyxJQUFJQSxPQUFPLENBQUNJLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDbEMsT0FBT1MsSUFBSSxDQUFDYixPQUFPLENBQUNVLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1RDtRQUNBLE9BQU8sRUFBRTtNQUNWLENBQUMsQ0FBQztNQUNGLElBQUlILGFBQWEsQ0FBQ1AsTUFBTSxJQUFJLENBQUMsRUFBRTtRQUM5QixPQUFPO1VBQ05KLE9BQU8sRUFBRUEsQ0FBQSxLQUFNLCtCQUErQjtVQUM5Q0csSUFBSSxFQUFFO1FBQ1AsQ0FBQztNQUNGLENBQUMsTUFBTTtRQUNOLE9BQU87VUFDTkgsT0FBTyxFQUFFQSxDQUFBLEtBQU1XLGFBQWEsQ0FBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQztVQUN2Q1osSUFBSSxFQUFFO1FBQ1AsQ0FBQztNQUNGO0lBQ0Q7RUFDRCxDQUFDLENBQUM7RUFBQ2EsUUFBQSxDQUFBcEIsYUFBQSxHQUFBQSxhQUFBO0VBRUksTUFBTXFCLHNCQUFzQixHQUFHLFNBQUFBLENBQVVDLFNBQTRCLEVBQVU7SUFDckYsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNGLFNBQVMsQ0FBQyxFQUFFO01BQzdCQSxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0gsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMvQjtJQUNBLE9BQU9NLFNBQVMsQ0FBQ0gsU0FBUyxDQUFDO0VBQzVCLENBQUM7RUFBQ0YsUUFBQSxDQUFBQyxzQkFBQSxHQUFBQSxzQkFBQTtFQUVLLE1BQU1LLG1CQUFtQixHQUFHLFNBQUFBLENBQVVDLGVBQXVCLEVBQUVDLGFBQXFCLEVBQUVDLE1BQVksRUFBRTtJQUMxRyxNQUFNNUUsUUFBUSxHQUFHLFVBQVVGLHFCQUFxQixDQUFDOEUsTUFBTSxFQUFFRixlQUFlLENBQUMsS0FBS0MsYUFBYSxHQUFHO0lBQzlGLE9BQU81QixhQUFhLENBQUMvQyxRQUFRLEVBQUU0RSxNQUFNLENBQUM7RUFDdkMsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUEFULFFBQUEsQ0FBQU0sbUJBQUEsR0FBQUEsbUJBQUE7RUFRTyxNQUFNcEIsWUFBWSxHQUFHLFNBQUFBLENBQVV1QixNQUFZLEVBQUU1RSxRQUFpQixFQUFFNkUsT0FBc0MsRUFBVTtJQUN0SCxNQUFNQyxVQUFVLEdBQUcsSUFBSUMsTUFBTSxDQUFDQyxhQUFhLENBQUMsQ0FBQztJQUM3QyxJQUFJWCxTQUFpQjtJQUNyQixJQUFJckUsUUFBUSxFQUFFO01BQ2IsTUFBTWtELEtBQUssR0FBR0gsYUFBYSxDQUFDL0MsUUFBUSxFQUFFNEUsTUFBTSxDQUFXO01BQ3ZEUCxTQUFTLEdBQUduQixLQUFLLENBQUNhLEdBQUcsQ0FBRWtCLElBQUksSUFBS0gsVUFBVSxDQUFDSSxpQkFBaUIsQ0FBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMvRSxDQUFDLE1BQU07TUFDTkcsU0FBUyxHQUFHUyxVQUFVLENBQUNJLGlCQUFpQixDQUFDTixNQUFNLENBQUM7SUFDakQ7SUFDQSxPQUFPSixTQUFTLENBQUNILFNBQVMsRUFBRVEsT0FBTyxDQUFDO0VBQ3JDLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBWEFWLFFBQUEsQ0FBQWQsWUFBQSxHQUFBQSxZQUFBO0VBWU8sTUFBTW1CLFNBQVMsR0FBRyxTQUFBQSxDQUFVSCxTQUFpQixFQUFFUSxPQUFzQyxFQUFVO0lBQ3JHLE1BQU1NLEtBQUssR0FBRyxXQUFXO01BQ3hCQyxHQUFHLEdBQUcsWUFBWTtNQUNsQkMsS0FBZSxHQUFHLEVBQUU7SUFFckIsSUFBSUMsV0FBVyxHQUFHLEVBQUU7TUFDbkJDLEtBQUssR0FBRyxDQUFDLENBQUM7TUFDVkMsVUFBOEMsR0FBRyxFQUFFO0lBRXBELFNBQVNDLE9BQU9BLENBQUEsRUFBRztNQUNsQixJQUFJSCxXQUFXLElBQUlBLFdBQVcsS0FBS0gsS0FBSyxFQUFFO1FBQ3pDRSxLQUFLLENBQUNLLElBQUksQ0FBQ0osV0FBVyxDQUFDO01BQ3hCO01BRUFBLFdBQVcsR0FBR0MsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUNJLE1BQU0sQ0FBQ0osS0FBSyxDQUFDLEdBQUcsRUFBRTtJQUNsRDtJQUVBLFNBQVNLLGdCQUFnQkEsQ0FBQSxFQUFHO01BQzNCLElBQUlKLFVBQVUsQ0FBQ2pDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDMUJpQyxVQUFVLEdBQUdBLFVBQVUsQ0FBQ0ssSUFBSSxDQUFDLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxLQUFLO1VBQ3RDLElBQUlELENBQUMsQ0FBQ3JELElBQUksQ0FBQ3RDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDNEYsQ0FBQyxDQUFDdEQsSUFBSSxDQUFDdEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzlELE9BQU8sQ0FBQyxDQUFDO1VBQ1YsQ0FBQyxNQUFNLElBQUksQ0FBQzJGLENBQUMsQ0FBQ3JELElBQUksQ0FBQ3RDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSTRGLENBQUMsQ0FBQ3RELElBQUksQ0FBQ3RDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNyRSxPQUFPLENBQUM7VUFDVCxDQUFDLE1BQU0sSUFBSTJGLENBQUMsQ0FBQ3JELElBQUksQ0FBQ3RDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSTRGLENBQUMsQ0FBQ3RELElBQUksQ0FBQ3RDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNwRSxPQUFPMkYsQ0FBQyxDQUFDckQsSUFBSSxDQUFDdUQsYUFBYSxDQUFDRCxDQUFDLENBQUN0RCxJQUFJLENBQUM7VUFDcEMsQ0FBQyxNQUFNLElBQUlxRCxDQUFDLENBQUNyRCxJQUFJLENBQUN3RCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQ0YsQ0FBQyxDQUFDdEQsSUFBSSxDQUFDd0QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pELE9BQU8sQ0FBQyxDQUFDO1VBQ1YsQ0FBQyxNQUFNLElBQUksQ0FBQ0gsQ0FBQyxDQUFDckQsSUFBSSxDQUFDd0QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJRixDQUFDLENBQUN0RCxJQUFJLENBQUN3RCxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekQsT0FBTyxDQUFDO1VBQ1QsQ0FBQyxNQUFNO1lBQ04sT0FBT0gsQ0FBQyxDQUFDckQsSUFBSSxDQUFDdUQsYUFBYSxDQUFDRCxDQUFDLENBQUN0RCxJQUFJLENBQUM7VUFDcEM7UUFDRCxDQUFDLENBQUM7UUFFRjhDLEtBQUssRUFBRTtRQUNQLEtBQUssTUFBTVcsU0FBUyxJQUFJVixVQUFVLEVBQUU7VUFDbkNDLE9BQU8sQ0FBQyxDQUFDO1VBQ1RILFdBQVcsSUFBSVksU0FBUyxDQUFDekQsSUFBSTtVQUM3QixJQUFJeUQsU0FBUyxDQUFDQyxLQUFLLEVBQUViLFdBQVcsSUFBSVksU0FBUyxDQUFDQyxLQUFLO1FBQ3BEO1FBQ0FaLEtBQUssRUFBRTtRQUNQQyxVQUFVLEdBQUcsRUFBRTtRQUNmQyxPQUFPLENBQUMsQ0FBQztNQUNWO0lBQ0Q7SUFFQSxTQUFTVyxNQUFNQSxDQUFDbEYsSUFBVyxFQUFFO01BQzVCb0UsV0FBVyxJQUFJZSxNQUFNLENBQUNDLElBQUksQ0FBQ3BGLElBQUksQ0FBQztJQUNqQztJQUVBLE1BQU1tRixNQUFNLEdBQUdFLFlBQVksQ0FBQztNQUMzQkMsY0FBY0EsQ0FBQ3RGLElBQVcsRUFBRTtRQUMzQnVFLE9BQU8sQ0FBQyxDQUFDO1FBQ1RXLE1BQU0sQ0FBQ2xGLElBQUksQ0FBQztNQUNiLENBQUM7TUFFRHVGLGFBQWEsRUFBRUwsTUFBTTtNQUVyQk0sVUFBVUEsQ0FBQ3hGLElBQVcsRUFBRTtRQUN2QnNFLFVBQVUsQ0FBQ21CLE9BQU8sQ0FBQztVQUFFbEUsSUFBSSxFQUFFNEQsTUFBTSxDQUFDQyxJQUFJLENBQUNwRixJQUFJO1FBQUUsQ0FBQyxDQUFDO01BQ2hELENBQUM7TUFFRDBGLFdBQVdBLENBQUMxRixJQUFzQixFQUFFO1FBQ25Dc0UsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDVyxLQUFLLEdBQUdFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDcEYsSUFBSSxDQUFDO1FBQ3ZDc0UsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDVyxLQUFLLEdBQUdFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDcEYsSUFBSSxDQUFDO1FBQ3ZDLElBQUkyRCxPQUFPLEVBQUVnQyxjQUFjLEtBQUssSUFBSSxFQUFFO1VBQ3JDckIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDVyxLQUFLLEdBQUdXLGVBQWUsQ0FBQ3RCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ1csS0FBSyxDQUFDO1FBQzNEO01BQ0QsQ0FBQztNQUVEWSxZQUFZQSxDQUFDN0YsSUFBdUIsRUFBRTtRQUNyQzBFLGdCQUFnQixDQUFDLENBQUM7UUFDbEJRLE1BQU0sQ0FBQ2xGLElBQUksQ0FBQztRQUNaLElBQUksQ0FBQ0EsSUFBSSxDQUFDOEYsVUFBVSxFQUFFekIsS0FBSyxFQUFFO01BQzlCLENBQUM7TUFFRDBCLGVBQWVBLENBQUMvRixJQUFXLEVBQUU7UUFDNUJxRSxLQUFLLEVBQUU7UUFDUEUsT0FBTyxDQUFDLENBQUM7UUFDVFcsTUFBTSxDQUFDbEYsSUFBSSxDQUFDO01BQ2IsQ0FBQztNQUVEZ0csY0FBYyxFQUFFZCxNQUFNO01BQ3RCZSxhQUFhLEVBQUVmO0lBQ2hCLENBQUMsQ0FBQztJQUVGQyxNQUFNLENBQUNlLEtBQUssQ0FBQ2pDLEtBQUssR0FBR2QsU0FBUyxHQUFHZSxHQUFHLENBQUM7SUFDckMsT0FBT0MsS0FBSyxDQUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDbUQsSUFBSSxDQUFDLENBQUM7RUFDL0IsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BbEQsUUFBQSxDQUFBSyxTQUFBLEdBQUFBLFNBQUE7RUFPTyxNQUFNOEMsVUFBVSxHQUFHLFNBQUFBLENBQVVDLE1BQWMsRUFBdUM7SUFBQSxJQUFyQzFDLE9BQThCLEdBQUEyQyxTQUFBLENBQUFqRSxNQUFBLFFBQUFpRSxTQUFBLFFBQUEzRixTQUFBLEdBQUEyRixTQUFBLE1BQUcsQ0FBQyxDQUFDO0lBQ3RGLE1BQU1DLFNBQVMsR0FBR0MsRUFBRSxDQUFDQyxZQUFZLENBQUNKLE1BQU0sRUFBRSxPQUFPLENBQUM7SUFDbEQsTUFBTUssV0FBVyxHQUFHQyxRQUFRLENBQUNKLFNBQVMsRUFBRSx5QkFBeUIsRUFBRTVDLE9BQU8sQ0FBQztJQUMzRSxNQUFNaUQsR0FBRyxHQUFHQyxJQUFJLENBQUNDLE9BQU8sQ0FBQ1QsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7O0lBRTdDO0lBQ0E7SUFDQSxNQUFNVSxVQUFVLEdBQUc3SSxNQUFNLENBQUM4SSxPQUFPLENBQUNyRCxPQUFPLENBQUM7SUFDMUNvRCxVQUFVLENBQUNwQyxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsYUFBYSxDQUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuRCxNQUFNcUMsWUFBWSxHQUNqQkYsVUFBVSxDQUFDM0ksTUFBTSxDQUNoQixDQUFDOEksUUFBUSxFQUFBQyxJQUFBO01BQUEsSUFBRSxDQUFDQyxTQUFTLEVBQUVDLFdBQVcsQ0FBQyxHQUFBRixJQUFBO01BQUEsT0FBSyxHQUFHRCxRQUFRLElBQUlFLFNBQVMsSUFBSUMsV0FBVyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxHQUFHO0lBQUEsR0FDN0ZULElBQUksQ0FBQ1UsUUFBUSxDQUFDbEIsTUFBTSxDQUFDLENBQUM3RSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDekMsQ0FBQyxHQUFHLE1BQU07SUFFWCxNQUFNZ0csWUFBWSxHQUFHWCxJQUFJLENBQUNDLE9BQU8sQ0FBQ0YsR0FBRyxFQUFFSyxZQUFZLENBQUM7SUFFcERULEVBQUUsQ0FBQ2lCLFNBQVMsQ0FBQ2IsR0FBRyxFQUFFO01BQUVjLFNBQVMsRUFBRTtJQUFLLENBQUMsQ0FBQztJQUV0Q2xCLEVBQUUsQ0FBQ21CLGFBQWEsQ0FBQ0gsWUFBWSxFQUFFZCxXQUFXLENBQUM7SUFDM0MsT0FBT2MsWUFBWTtFQUNwQixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkF2RSxRQUFBLENBQUFtRCxVQUFBLEdBQUFBLFVBQUE7RUFPTyxTQUFTTyxRQUFRQSxDQUFDaUIsR0FBVyxFQUE0RTtJQUFBLElBQTFFQyxPQUFPLEdBQUF2QixTQUFBLENBQUFqRSxNQUFBLFFBQUFpRSxTQUFBLFFBQUEzRixTQUFBLEdBQUEyRixTQUFBLE1BQUcseUJBQXlCO0lBQUEsSUFBRTNDLE9BQThCLEdBQUEyQyxTQUFBLENBQUFqRSxNQUFBLFFBQUFpRSxTQUFBLFFBQUEzRixTQUFBLEdBQUEyRixTQUFBLE1BQUcsQ0FBQyxDQUFDO0lBQzdHLE1BQU13QixPQUErQixHQUFHO01BQUUsWUFBWSxFQUFFRjtJQUFJLENBQUM7O0lBRTdEO0lBQ0EsSUFBSUEsR0FBRyxDQUFDN0MsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7TUFDdEMrQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUd0QixFQUFFLENBQUNDLFlBQVksQ0FBQ3NCLE9BQU8sQ0FBQ2pCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUN6RjtJQUVBLE1BQU1rQixHQUFHLEdBQUdDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDSixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFaEQsTUFBTUssV0FBa0MsR0FBRztNQUMxQ0MsZ0JBQWdCLEVBQUUsSUFBSTtNQUN0QkMsV0FBVyxFQUFFLFlBQVk7TUFDekJDLGdCQUFnQixFQUFFLElBQUk7TUFDdEIsR0FBRzNFLE9BQU87TUFDVmtFLE9BQU8sRUFBRUE7SUFDVixDQUFDO0lBRUQsTUFBTVUsSUFBSSxHQUFHTixRQUFRLENBQUNPLEVBQUUsQ0FBQ0QsSUFBSSxDQUFDUCxHQUFHLEVBQUVHLFdBQVcsQ0FBQztJQUMvQyxJQUFJLENBQUNJLElBQUksRUFBRTtNQUNWLE1BQU0sSUFBSUUsS0FBSyxDQUFDLDBFQUEwRVosT0FBTyxHQUFHLENBQUM7SUFDdEc7SUFDQSxPQUFPVSxJQUFJO0VBQ1o7RUFBQ3RGLFFBQUEsQ0FBQTBELFFBQUEsR0FBQUEsUUFBQTtFQUVNLE1BQU0rQix5QkFBeUIsR0FBRyxlQUFBQSxDQUN4Q3ZJLFNBQXlCLEVBRUs7SUFBQSxJQUQ5QndJLG1CQUFtQixHQUFBckMsU0FBQSxDQUFBakUsTUFBQSxRQUFBaUUsU0FBQSxRQUFBM0YsU0FBQSxHQUFBMkYsU0FBQSxNQUFHLGtDQUFrQztJQUV4RCxNQUFNc0MsV0FBVyxHQUFHO01BQ25CQyxRQUFRLEVBQUVBLENBQUEsS0FBTTtRQUNmLE9BQU87VUFDTkMsR0FBRyxFQUFFQSxDQUFBLEtBQU1ILG1CQUFtQixLQUFLLGtDQUFrQztVQUNyRW5KLFlBQVksRUFBRUEsQ0FBQSxLQUFNO1lBQ25CLE9BQU9XLFNBQVM7VUFDakIsQ0FBQztVQUNENEksYUFBYSxFQUFFQSxDQUFBLEtBQU1wSTtRQUN0QixDQUFDO01BQ0YsQ0FBQztNQUNEcUksVUFBVSxFQUFFQSxDQUFBLEtBQU07UUFDakIsT0FBTztVQUNOQyxlQUFlLEVBQUVBLENBQUEsS0FBTXRJO1FBQ3hCLENBQUM7TUFDRjtJQUNELENBQUM7SUFDRCxNQUFNdUksZUFBZSxHQUFHLE1BQU0sSUFBSUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxjQUFjLENBQUM7TUFBRVIsV0FBVztNQUFFUyxTQUFTLEVBQUUsRUFBRTtNQUFFcEosUUFBUSxFQUFFLENBQUM7SUFBRSxDQUFDLENBQUM7SUFDbkgsT0FBT2lKLGVBQWUsQ0FBQ0ksWUFBWSxDQUFDLENBQUM7RUFDdEMsQ0FBQztFQUFDckcsUUFBQSxDQUFBeUYseUJBQUEsR0FBQUEseUJBQUE7RUFFSyxNQUFNYSxrQkFBa0IsR0FBRyxTQUFBQSxDQUFBLEVBQTBCO0lBQzNELE1BQU1DLE1BQWEsR0FBRyxFQUFFO0lBQ3hCLE9BQU87TUFDTkMsUUFBUUEsQ0FBQ0MsYUFBNEIsRUFBRUMsYUFBNEIsRUFBRUMsT0FBZSxFQUFRO1FBQzNGSixNQUFNLENBQUNoRixJQUFJLENBQUM7VUFDWGtGLGFBQWE7VUFDYkMsYUFBYTtVQUNiQztRQUNELENBQUMsQ0FBQztNQUNILENBQUM7TUFDREMsU0FBU0EsQ0FBQSxFQUFVO1FBQ2xCLE9BQU9MLE1BQU07TUFDZCxDQUFDO01BQ0RNLGtCQUFrQkEsQ0FBQ0osYUFBNEIsRUFBRUMsYUFBNEIsRUFBRUMsT0FBZSxFQUFXO1FBQ3hHLE9BQU9KLE1BQU0sQ0FBQ08sSUFBSSxDQUFFQyxLQUFLLElBQUs7VUFDN0IsT0FBT0EsS0FBSyxDQUFDTixhQUFhLEtBQUtBLGFBQWEsSUFBSU0sS0FBSyxDQUFDTCxhQUFhLEtBQUtBLGFBQWEsSUFBSUssS0FBSyxDQUFDSixPQUFPLEtBQUtBLE9BQU87UUFDbkgsQ0FBQyxDQUFDO01BQ0g7SUFDRCxDQUFDO0VBQ0YsQ0FBQztFQUFDM0csUUFBQSxDQUFBc0csa0JBQUEsR0FBQUEsa0JBQUE7RUFFSyxNQUFNVSwwQkFBMEIsR0FBRyxTQUFBQSxDQUN6QzlKLFNBQXlCLEVBQ3pCK0osZ0JBQXlFLEVBQ3hFO0lBQ0QsTUFBTUMsY0FBYyxHQUFHQyxZQUFZLENBQUNqSyxTQUFTLENBQUM7SUFDOUMsTUFBTWtLLGFBQWEsR0FBR0gsZ0JBQWdCLENBQUNJLFdBQVcsR0FDL0NDLDJCQUEyQixDQUF3QnBLLFNBQVMsQ0FBQ2lCLG9CQUFvQixDQUFDOEksZ0JBQWdCLENBQUNJLFdBQVcsQ0FBWSxDQUFDLEdBQzNIQywyQkFBMkIsQ0FBd0JwSyxTQUFTLENBQUNpQixvQkFBb0IsQ0FBQyxJQUFJOEksZ0JBQWdCLENBQUNNLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDdkgsT0FBTyxJQUFJQyxnQkFBZ0IsQ0FDMUJOLGNBQWMsRUFDZCxJQUFJTyxlQUFlLENBQUNSLGdCQUFnQixDQUFDLEVBQ3JDWCxrQkFBa0IsQ0FBQyxDQUFDLEVBQ3BCYyxhQUNELENBQUM7RUFDRixDQUFDO0VBQUNwSCxRQUFBLENBQUFnSCwwQkFBQSxHQUFBQSwwQkFBQTtFQUNGLE1BQU1VLGNBQW1CLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLE1BQU1uTCxZQUFZLEdBQUcsZUFBQUEsQ0FBZ0JMLFlBQW9CLEVBQUU7SUFDakUsTUFBTXlMLFVBQVUsR0FBR0Msa0JBQWtCLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUVuSyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWTtNQUN0RixPQUFPLElBQUk7SUFDWixDQUFDLENBQUM7SUFDRixJQUFJLENBQUNnSyxjQUFjLENBQUN4TCxZQUFZLENBQUMsRUFBRTtNQUNsQyxNQUFNSSxVQUFVLEdBQUcsSUFBS3dMLGNBQWMsQ0FBU0gsVUFBVSxFQUFFekwsWUFBWSxFQUFFd0IsU0FBUyxFQUFFO1FBQUVxSyx5QkFBeUIsRUFBRUEsQ0FBQSxLQUFNO01BQUcsQ0FBQyxDQUFDO01BQzVILE1BQU16TCxVQUFVLENBQUMwTCxvQkFBb0IsQ0FBQyxDQUFDO01BQ3ZDTixjQUFjLENBQUN4TCxZQUFZLENBQUMsR0FBR0ksVUFBVTtJQUMxQztJQUVBLE9BQU9vTCxjQUFjLENBQUN4TCxZQUFZLENBQUM7RUFDcEMsQ0FBQztFQUFDOEQsUUFBQSxDQUFBekQsWUFBQSxHQUFBQSxZQUFBO0VBRUssTUFBTTBMLGlDQUFpQyxHQUFHLFNBQUFBLENBQ2hEVixTQUFvQixFQUNwQkwsY0FBaUMsRUFDakNnQixRQUFZLEVBQ2E7SUFDekIsTUFBTUMsVUFBa0MsR0FBRztNQUMxQ0MsaUJBQWlCLEVBQUViLFNBQVM7TUFDNUJjLG9CQUFvQixFQUFFLEVBQUU7TUFDeEJDLFlBQVksRUFBRUosUUFBUTtNQUN0QkssZUFBZSxFQUFFaEIsU0FBUztNQUMxQmlCLGdCQUFnQixFQUFFakIsU0FBUyxDQUFDa0IsVUFBVTtNQUN0Q3ZCLGNBQWMsRUFBRUE7SUFDakIsQ0FBQztJQUNEaUIsVUFBVSxDQUFDTyxlQUFlLEdBQUdQLFVBQTRDO0lBQ3pFLE9BQU9BLFVBQVU7RUFDbEIsQ0FBQztFQUFDbkksUUFBQSxDQUFBaUksaUNBQUEsR0FBQUEsaUNBQUE7RUFFSyxNQUFNVSxlQUFlLEdBQUcsU0FBQUEsQ0FBVUMsYUFBcUIsRUFBa0I7SUFDL0UsTUFBTUMsY0FBYyxHQUFHQyxXQUFXLENBQUM3RixLQUFLLENBQUMyRixhQUFhLENBQUM7SUFBQyxTQUFBRyxJQUFBLEdBQUExRixTQUFBLENBQUFqRSxNQUFBLEVBRFU0SixJQUFJLE9BQUE3SSxLQUFBLENBQUE0SSxJQUFBLE9BQUFBLElBQUEsV0FBQUUsSUFBQSxNQUFBQSxJQUFBLEdBQUFGLElBQUEsRUFBQUUsSUFBQTtNQUFKRCxJQUFJLENBQUFDLElBQUEsUUFBQTVGLFNBQUEsQ0FBQTRGLElBQUE7SUFBQTtJQUV0RSxPQUFPSixjQUFjLENBQUNLLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDekwsU0FBUyxFQUFFc0wsSUFBSSxDQUFDO0VBQ3ZELENBQUM7RUFBQ2hKLFFBQUEsQ0FBQTJJLGVBQUEsR0FBQUEsZUFBQTtFQU1GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU1Msd0JBQXdCQSxDQUN2Q1IsYUFBaUMsRUFDakNTLFlBQTBCLEVBQzFCQyxrQkFBMEQsRUFDakQ7SUFDVCxNQUFNVCxjQUFjLEdBQUdDLFdBQVcsQ0FBQzdGLEtBQUssQ0FBQzJGLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO01BQ3pGLEdBQUcsRUFBRTtRQUNKVyxXQUFXLEVBQUU7VUFDWkMsY0FBYyxFQUFFQTtRQUNqQjtNQUNEO0lBQ0QsQ0FBQyxDQUFDO0lBQ0YsTUFBTUMsSUFBSSxHQUFHLElBQUlDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hDRCxJQUFJLENBQUNFLFlBQVksQ0FBQyxNQUFNLEVBQUVkLGNBQWMsQ0FBQztJQUV6QyxNQUFNZSxZQUFZLEdBQUcsSUFBSUMsU0FBUyxDQUFDUixZQUFZLENBQUM7SUFDaERJLElBQUksQ0FBQ0ssUUFBUSxDQUFDRixZQUFZLENBQUM7SUFDM0JILElBQUksQ0FBQ00saUJBQWlCLENBQUNILFlBQVksQ0FBQ3pMLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTlELElBQUltTCxrQkFBa0IsRUFBRTtNQUN2QixLQUFLLE1BQU0sQ0FBQ2hMLElBQUksRUFBRTBMLE9BQU8sQ0FBQyxJQUFJL08sTUFBTSxDQUFDOEksT0FBTyxDQUFDdUYsa0JBQWtCLENBQUMsRUFBRTtRQUNqRSxNQUFNVyxLQUFLLEdBQUcsSUFBSUosU0FBUyxDQUFDRyxPQUFPLENBQUM7UUFDcENQLElBQUksQ0FBQ0ssUUFBUSxDQUFDRyxLQUFLLEVBQUUzTCxJQUFJLENBQUM7UUFDMUJtTCxJQUFJLENBQUNNLGlCQUFpQixDQUFDRSxLQUFLLENBQUM5TCxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRUcsSUFBSSxDQUFDO01BQzlEO0lBQ0Q7SUFFQSxPQUFPbUwsSUFBSSxDQUFDUyxPQUFPLENBQUMsQ0FBQztFQUN0QjtFQUFDbEssUUFBQSxDQUFBb0osd0JBQUEsR0FBQUEsd0JBQUE7RUFFRCxNQUFNZSxVQUFVLEdBQUcsWUFBWTtFQUUvQixNQUFNQyxnQkFBZ0IsR0FBRyxlQUFBQSxDQUFnQkMsV0FBc0MsRUFBRS9OLFVBQXFCLEVBQUVnTyxTQUFjLEVBQUU7SUFDdkg7SUFDQSxDQUFDLEdBQUdBLFNBQVMsQ0FBQ0MsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzNOLE9BQU8sQ0FBRWtFLElBQUksSUFBSztNQUN6REEsSUFBSSxDQUFDMEosRUFBRSxHQUFHLEdBQUdMLFVBQVUsS0FBS3JKLElBQUksQ0FBQzBKLEVBQUUsRUFBRTtJQUN0QyxDQUFDLENBQUM7SUFDRixNQUFNQyxPQUFPLEdBQUdDLDhCQUE4QixDQUFDUCxVQUFVLEVBQUVFLFdBQVcsQ0FBQztJQUN2RSxNQUFNTSxLQUFLLEdBQUcsZUFBZTtJQUM3QixNQUFNQyxTQUFTLEdBQUc7TUFDakIsU0FBUyxFQUFFO1FBQ1ZKLEVBQUUsRUFBRUcsS0FBSztRQUNURSxJQUFJLEVBQUUsYUFBYTtRQUNuQkMsZUFBZSxFQUFFO1VBQ2hCQyxTQUFTLEVBQUU7UUFDWjtNQUNEO0lBQ0QsQ0FBQztJQUNELE1BQU1DLGFBQTJCLEdBQUc7TUFDbkN2TixjQUFjLEVBQUU3RSxJQUFJLENBQUMyRSxFQUFFLENBQUMsQ0FBQyxDQUFDTSxlQUFlLENBQUN5SSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7TUFDL0RWLFFBQVEsRUFBRWhOLElBQUksQ0FBQzJFLEVBQUUsQ0FBQyxDQUFDLENBQUNNLGVBQWUsQ0FBQztRQUNuQ3RCLFlBQVksRUFBRTNELElBQUksQ0FBQzJFLEVBQUUsQ0FBQyxDQUFDLENBQUNNLGVBQWUsQ0FBQ3ZCLFVBQVU7TUFDbkQsQ0FBQyxDQUFDO01BQ0YyTyxnQkFBZ0IsRUFBRXJTLElBQUksQ0FBQzJFLEVBQUUsQ0FBQyxDQUFDLENBQUNNLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMvQ3FOLGlCQUFpQixFQUFFdFMsSUFBSSxDQUFDMkUsRUFBRSxDQUFDLENBQUMsQ0FBQ00sZUFBZSxDQUFDO1FBQzVDc04sUUFBUSxFQUFFLFNBQUFBLENBQVU3TSxJQUFZLEVBQUU7VUFDakMsT0FBUXNNLFNBQVMsQ0FBU3RNLElBQUksQ0FBQztRQUNoQztNQUNELENBQUMsQ0FBQztNQUNGOE0sVUFBVSxFQUFFeFMsSUFBSSxDQUFDMkUsRUFBRSxDQUFFOE4sR0FBRyxJQUFLQSxHQUFHO0lBQ2pDLENBQTRCO0lBQzVCO0lBQ0F6UyxJQUFJLENBQUMwUyxLQUFLLENBQUNDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQzFOLGVBQWUsQ0FBQzJOLE9BQU8sQ0FBQzNILE9BQU8sQ0FBQzRHLE9BQU8sQ0FBQyxDQUFDO0lBQ2hGN1IsSUFBSSxDQUFDMFMsS0FBSyxDQUFDRyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM1TixlQUFlLENBQUMyTixPQUFPLENBQUMzSCxPQUFPLENBQUM7TUFBRTlHLElBQUksRUFBRTBOO0lBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckY3UixJQUFJLENBQUMwUyxLQUFLLENBQUNHLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDNU4sZUFBZSxDQUFDNE0sT0FBTyxDQUFDO0lBRWhFN1IsSUFBSSxDQUFDMFMsS0FBSyxDQUFDSSxTQUFTLEVBQXlELGtCQUFrQixDQUFDLENBQUM3TixlQUFlLENBQUNtTixhQUFhLENBQUM7SUFDL0hwUyxJQUFJLENBQUMwUyxLQUFLLENBQUNLLEtBQUssRUFBRSwyQkFBMkIsQ0FBQyxDQUFDOU4sZUFBZSxDQUFDbU4sYUFBYSxDQUFDO0lBQzdFLE1BQU1ZLFNBQVMsQ0FBQ0MsVUFBVSxDQUFDO01BQzFCQyxXQUFXLEVBQUVuQjtJQUNkLENBQUMsQ0FBQztJQUNGTCxTQUFTLEdBQUcsTUFBTXlCLGVBQWUsQ0FBQ0MsT0FBTyxDQUFDMUIsU0FBUyxFQUFFO01BQUVoTSxJQUFJLEVBQUUsZUFBZTtNQUFFd04sV0FBVyxFQUFFbkIsS0FBSztNQUFFSCxFQUFFLEVBQUVMO0lBQVcsQ0FBQyxDQUFDOztJQUVuSDtJQUNBLE1BQU04QixjQUFjLEdBQUdDLGlCQUFpQixDQUFDNUIsU0FBUyxDQUFDO0lBQ25Edk0sTUFBTSxDQUFDa08sY0FBYyxDQUFDN00sTUFBTSxDQUFDLENBQUMrTSxJQUFJLENBQUM5QixXQUFXLEVBQUVJLE9BQU8sRUFBRXJMLE1BQU0sSUFBSWlMLFdBQVcsRUFBRStCLDhCQUE4QixFQUFFaE4sTUFBTSxJQUFJLENBQUMsQ0FBQztJQUM1SCxPQUFPa0wsU0FBUztFQUNqQixDQUFDO0VBRU0sTUFBTTRCLGlCQUFpQixHQUFJM00sR0FBUSxJQUN6QyxDQUFDLEdBQUdBLEdBQUcsQ0FBQ2dMLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzVCOEIsT0FBTyxDQUFFQyxDQUFDLElBQUssQ0FBQyxHQUFHQSxDQUFDLENBQUNqTCxVQUFVLENBQUMsQ0FBQ3pCLEdBQUcsQ0FBRStCLENBQUMsSUFBS0EsQ0FBQyxDQUFDckQsSUFBSSxDQUFDLENBQUMsQ0FDcERpTyxNQUFNLENBQUVDLElBQUksSUFBS0EsSUFBSSxDQUFDMUssUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7RUFBQzlCLFFBQUEsQ0FBQWtNLGlCQUFBLEdBQUFBLGlCQUFBO0VBRXhELE1BQU1PLG1CQUFtQixHQUFHLGVBQUFBLENBQ2xDQyxRQUFnQixFQUNoQnhRLFlBQWdDLEVBQ2hDQyxnQkFBMEQsRUFDMURDLE9BQTZCLEVBQzdCaU8sV0FBdUMsRUFDdkNoTyxxQkFBK0IsRUFDOUI7SUFDRCxJQUFJLENBQUNELE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtNQUM1QkEsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHdVEsdUJBQXVCLENBQUMsQ0FBQztJQUNuRDtJQUVBLE1BQU1DLFlBQVksR0FBRyxTQUFTRixRQUFRLFNBQVM7SUFDL0MsTUFBTXhLLE1BQU0sR0FBRyxJQUFJdEIsTUFBTSxDQUFDaU0sU0FBUyxDQUFDLENBQUM7SUFDckMsTUFBTUMsTUFBTSxHQUFHNUssTUFBTSxDQUFDNkssZUFBZSxDQUFDSCxZQUFZLEVBQUUsVUFBVSxDQUFDO0lBQy9EO0lBQ0E7O0lBRUEsTUFBTUkscUJBQXFCLEdBQUcsTUFBTS9RLDBCQUEwQixDQUFDQyxZQUFZLEVBQUVDLGdCQUFnQixFQUFFQyxPQUFPLEVBQUVDLHFCQUFxQixDQUFDOztJQUU5SDtJQUNBLElBQUkyUSxxQkFBcUIsQ0FBQy9QLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtNQUN6QytQLHFCQUFxQixDQUFDN1AsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHNlAscUJBQXFCLENBQUMvUCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUNrQixvQkFBb0IsQ0FBQyxHQUFHLENBQUM7SUFDL0c7SUFFQSxJQUFJbU0sU0FBUyxHQUFJLE1BQU0yQyxlQUFlLENBQUNqQixPQUFPLENBQUNjLE1BQU0sQ0FBQ0ksaUJBQWlCLEVBQUc7TUFBRTVPLElBQUksRUFBRTtJQUFnQixDQUFDLEVBQUUwTyxxQkFBcUIsQ0FBUztJQUVuSSxJQUFJOVEsWUFBWSxJQUFJbU8sV0FBVyxFQUFFO01BQ2hDO01BQ0EsTUFBTS9OLFVBQVUsR0FBRyxNQUFNQyxZQUFZLENBQUNMLFlBQVksQ0FBQztNQUNuRG9PLFNBQVMsR0FBRyxNQUFNRixnQkFBZ0IsQ0FBQ0MsV0FBVyxFQUFFL04sVUFBVSxFQUFFZ08sU0FBUyxDQUFDO0lBQ3ZFO0lBQ0EsT0FBT0EsU0FBUztFQUNqQixDQUFDO0VBQUN0SyxRQUFBLENBQUF5TSxtQkFBQSxHQUFBQSxtQkFBQTtFQUVLLE1BQU1VLGVBQWUsR0FBRyxlQUFBQSxDQUM5QlQsUUFBZ0IsRUFDaEJ4USxZQUFnQyxFQUNoQ0MsZ0JBQXlDLEVBQ3pDQyxPQUE2QixFQUM3QmlPLFdBQXVDLEVBQ3ZDaE8scUJBQStCLEVBQy9CcUUsT0FBc0MsRUFDcEI7SUFDbEIsT0FBTzBNLEdBQUcsQ0FBQ0MscUJBQXFCLENBQUNyUyxrQkFBa0IsRUFBRSxZQUFZO01BQ2hFLE1BQU1zUyxZQUFZLEdBQUcsTUFBTWIsbUJBQW1CLENBQzdDQyxRQUFRLEVBQ1J4USxZQUFZLEVBQ1pDLGdCQUFnQixFQUNoQkMsT0FBTyxFQUNQaU8sV0FBVyxFQUNYaE8scUJBQ0QsQ0FBQztNQUNELE1BQU1rUixZQUFZLEdBQUdyTyxZQUFZLENBQUNvTyxZQUFZLEVBQUU1UCxTQUFTLEVBQUVnRCxPQUFPLENBQUM7TUFDbkUzQyxNQUFNLENBQUN3UCxZQUFZLENBQUMsQ0FBQ0MsR0FBRyxDQUFDbE8sc0JBQXNCLENBQUMsQ0FBQztNQUNqRCxPQUFPaU8sWUFBWTtJQUNwQixDQUFDLENBQUM7RUFDSCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVJBdk4sUUFBQSxDQUFBbU4sZUFBQSxHQUFBQSxlQUFBO0VBU08sZUFBZU0sV0FBV0EsQ0FDaENuUCxJQUFZLEVBQ1pwQyxZQUFvQixFQUNwQkMsZ0JBQXlDLEVBQ3pDQyxPQUE2QixFQUM3QmlPLFdBQXVDLEVBQ1Y7SUFDN0IsTUFBTS9OLFVBQVUsR0FBRyxNQUFNQyxZQUFZLENBQUNMLFlBQVksQ0FBQztJQUNuRCxNQUFNd1IsYUFBYSxHQUFHdFAsaUJBQWlCLENBQUNFLElBQUksQ0FBQztJQUM3QyxNQUFNME8scUJBQXFCLEdBQUcsTUFBTS9RLDBCQUEwQixDQUFDQyxZQUFZLEVBQUVDLGdCQUFnQixFQUFFQyxPQUFPLENBQUM7SUFDdkcsSUFBSXVSLGlCQUFpQixHQUFHLE1BQU1WLGVBQWUsQ0FBQ2pCLE9BQU8sQ0FBQzBCLGFBQWEsRUFBRTtNQUFFcFAsSUFBSSxFQUFFQTtJQUFLLENBQUMsRUFBRTBPLHFCQUFxQixDQUFDO0lBQzNHLElBQUkzQyxXQUFXLEVBQUU7TUFDaEJzRCxpQkFBaUIsR0FBRyxNQUFNdkQsZ0JBQWdCLENBQUNDLFdBQVcsSUFBSSxFQUFFLEVBQUUvTixVQUFVLEVBQUVxUixpQkFBaUIsQ0FBQztJQUM3RjtJQUNBLE9BQU87TUFDTkMsU0FBUyxFQUFFRCxpQkFBaUI7TUFDNUJFLFFBQVEsRUFBRXhOLFNBQVMsQ0FBQ3NOLGlCQUFpQixFQUFFRyxTQUFTLElBQUksRUFBRTtJQUN2RCxDQUFDO0VBQ0Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE5TixRQUFBLENBQUF5TixXQUFBLEdBQUFBLFdBQUE7RUFNTyxlQUFlTSxlQUFlQSxDQUFDelAsSUFBWSxFQUFFMFAsUUFBcUMsRUFBbUI7SUFDM0csTUFBTUMsUUFBUSxHQUFHLHNDQUFzQzNQLElBQUksaURBQWlEO0lBQzVHLE1BQU00RCxNQUFNLEdBQUcsSUFBSXRCLE1BQU0sQ0FBQ2lNLFNBQVMsQ0FBQyxDQUFDO0lBRXJDLE1BQU1xQixRQUFRLEdBQUdoTSxNQUFNLENBQUM2SyxlQUFlLENBQUNrQixRQUFRLEVBQUUsVUFBVSxDQUFDOztJQUU3RDtJQUNBLE1BQU1qUixRQUFRLEdBQUc7TUFDaEJDLE1BQU0sRUFBRSxDQUFDLENBQWtDO01BQzNDRSxlQUFlLEVBQUUsQ0FBQyxDQUErQjtNQUNqREMsWUFBWSxFQUFFO1FBQUVJLHFCQUFxQixFQUFFNUUsSUFBSSxDQUFDMkUsRUFBRSxDQUFDLENBQUM7UUFBRUUsY0FBYyxFQUFFQSxDQUFBLEtBQU1DO01BQVU7SUFDbkYsQ0FBQztJQUNELEtBQUssTUFBTXVNLEtBQUssSUFBSStELFFBQVEsRUFBRTtNQUM3QixNQUFNRyxTQUFTLEdBQUcsSUFBSXRFLFNBQVMsQ0FBQyxDQUFDO01BQ2pDc0UsU0FBUyxDQUFDQyxPQUFPLENBQUNKLFFBQVEsQ0FBQy9ELEtBQUssQ0FBQyxDQUFDO01BQ2xDak4sUUFBUSxDQUFDQyxNQUFNLENBQUNnTixLQUFLLENBQUMsR0FBR2tFLFNBQVM7TUFDbENuUixRQUFRLENBQUNHLGVBQWUsQ0FBQzhNLEtBQUssQ0FBQyxHQUFHak4sUUFBUSxDQUFDQyxNQUFNLENBQUNnTixLQUFLLENBQUMsQ0FBQzlMLG9CQUFvQixDQUFDLEdBQUcsQ0FBQztJQUNuRjtJQUNBbkIsUUFBUSxDQUFDSSxZQUFZLENBQUNJLHFCQUFxQixDQUFDSyxlQUFlLENBQUNwQyw0QkFBNEIsQ0FBQzs7SUFFekY7SUFDQSxNQUFNNFMsU0FBUyxHQUFHLE1BQU1wQixlQUFlLENBQUNqQixPQUFPLENBQUNrQyxRQUFRLENBQUNoQixpQkFBaUIsRUFBRTtNQUFFNU87SUFBSyxDQUFDLEVBQUV0QixRQUFRLENBQUM7O0lBRS9GO0lBQ0EsTUFBTXNSLFNBQVMsR0FBR0QsU0FBUyxDQUFDRSxvQkFBb0IsQ0FBQyxlQUFlLENBQVE7SUFDeEUsSUFBSUQsU0FBUyxFQUFFbFAsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUMxQixLQUFLLE1BQU1vUCxRQUFRLElBQUlGLFNBQVMsRUFBRTtRQUNqQ0UsUUFBUSxDQUFDQyxTQUFTLEdBQUcsRUFBRTtNQUN4QjtJQUNEOztJQUVBO0lBQ0EsTUFBTUMsU0FBUyxHQUFHTCxTQUFTLENBQUNNLFFBQVEsQ0FBQ3ZQLE1BQU0sR0FBRyxDQUFDLEdBQUdpUCxTQUFTLENBQUNQLFNBQVMsR0FBR08sU0FBUyxDQUFDSSxTQUFTO0lBRTNGLE9BQU9wTyxTQUFTLENBQUNxTyxTQUFTLENBQUM7RUFDNUI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEExTyxRQUFBLENBQUErTixlQUFBLEdBQUFBLGVBQUE7RUFNQSxTQUFTYSxNQUFNQSxDQUFDQyxRQUFnQixFQUFhO0lBQUEsSUFBWEMsS0FBSyxHQUFBekwsU0FBQSxDQUFBakUsTUFBQSxRQUFBaUUsU0FBQSxRQUFBM0YsU0FBQSxHQUFBMkYsU0FBQSxNQUFHLENBQUM7SUFDMUMsSUFBSTBMLEdBQUcsR0FBRyxFQUFFO0lBQ1osS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdILFFBQVEsR0FBR0MsS0FBSyxFQUFFRSxDQUFDLEVBQUUsRUFBRTtNQUMxQ0QsR0FBRyxJQUFJLElBQUk7SUFDWjtJQUNBLE9BQU9BLEdBQUc7RUFDWDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3BNLGVBQWVBLENBQUM2SCxFQUFVLEVBQVU7SUFDNUMsTUFBTXlFLEdBQUcsR0FBRyx3QkFBd0I7SUFDcEMsTUFBTUMsU0FBUyxHQUFHLG1CQUFtQjtJQUNyQyxPQUFPMUUsRUFBRSxDQUFDak0sT0FBTyxDQUFDMFEsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDMVEsT0FBTyxDQUFDMlEsU0FBUyxFQUFFLElBQUksQ0FBQztFQUMzRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0MsV0FBV0EsQ0FDbkI1VixPQUFnQixFQUNoQjZWLFdBQW1CLEVBQ25CMU8sT0FFQyxFQUNBO0lBQ0QsSUFBSTJPLGFBQWEsR0FBRzlWLE9BQU8sQ0FBQzRWLFdBQVcsQ0FBQ0MsV0FBVyxDQUFDO0lBQ3BELElBQUksT0FBT0MsYUFBYSxLQUFLLFFBQVEsRUFBRTtNQUN0Q0EsYUFBYSxHQUFHM08sT0FBTyxFQUFFZ0MsY0FBYyxLQUFLLElBQUksR0FBR0MsZUFBZSxDQUFDME0sYUFBYSxDQUFDLEdBQUdBLGFBQWE7TUFDakcsSUFBSUEsYUFBYSxLQUFLLEVBQUUsRUFBRTtRQUN6QkEsYUFBYSxHQUFHLGVBQWU7TUFDaEM7SUFDRCxDQUFDLE1BQU0sSUFBSSxPQUFPQSxhQUFhLEtBQUssUUFBUSxFQUFFO01BQzdDLElBQUk7UUFDSEEsYUFBYSxHQUFHQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0YsYUFBYSxDQUFDO01BQzlDLENBQUMsQ0FBQyxPQUFPL0MsQ0FBQyxFQUFFO1FBQ1g7TUFBQTtJQUVGO0lBQ0EsT0FBTytDLGFBQWE7RUFDckI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNHLGNBQWNBLENBQ3RCalcsT0FBZ0IsRUFDaEI2VixXQUFtQixFQUNuQjFPLE9BRUMsRUFDQTtJQUNELE1BQU0rTyxhQUFhLEdBQUc7TUFBRSxHQUFJbFcsT0FBTyxDQUFDaVcsY0FBYyxDQUFDSixXQUFXO0lBQTBDLENBQUM7SUFDekcsSUFBSUssYUFBYSxDQUFDNUUsSUFBSSxFQUFFNkUsYUFBYSxFQUFFO01BQ3RDLE9BQU9ELGFBQWEsQ0FBQzVFLElBQUksQ0FBQzZFLGFBQWE7SUFDeEM7SUFDQSxJQUFJRCxhQUFhLENBQUNFLE9BQU8sRUFBRTtNQUMxQixPQUFPRixhQUFhLENBQUNFLE9BQU87SUFDN0I7SUFDQSxNQUFNM04sS0FBSyxHQUFHc04sSUFBSSxDQUFDQyxTQUFTLENBQUNFLGFBQWEsQ0FBQztJQUMzQyxPQUFPL08sT0FBTyxFQUFFZ0MsY0FBYyxLQUFLLElBQUksR0FBR0MsZUFBZSxDQUFDWCxLQUFLLENBQUMsR0FBR0EsS0FBSztFQUN6RTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVM0TixtQkFBbUJBLENBQzNCclcsT0FBZ0IsRUFDaEJzVixRQUFnQixFQUNoQm5PLE9BS0MsRUFDUTtJQUNULElBQUkzRCxJQUFJLEdBQUcsRUFBRTtJQUNiLE1BQU04UyxVQUFVLEdBQUduUCxPQUFPLEVBQUVtUCxVQUFVLElBQUksRUFBRTtJQUM1QyxNQUFNbk4sY0FBYyxHQUFHaEMsT0FBTyxFQUFFZ0MsY0FBYyxLQUFLLElBQUk7SUFDdkQsTUFBTW9OLFVBQVUsR0FBRzdVLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDM0IsT0FBTyxDQUFDd1csV0FBVyxDQUFDLENBQUMsQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUN6RCxNQUFNLENBQUU2QyxXQUFXLElBQUssQ0FBQ1MsVUFBVSxDQUFDL04sUUFBUSxDQUFDc04sV0FBVyxDQUFDLENBQUM7SUFDbklVLFVBQVUsQ0FBQ3BPLElBQUksQ0FBQyxDQUFDO0lBQ2pCLEtBQUssTUFBTTBOLFdBQVcsSUFBSVUsVUFBVSxFQUFFO01BQ3JDLElBQUlwUCxPQUFPLEVBQUV1UCxtQkFBbUIsS0FBSyxJQUFJLElBQUksQ0FBQzFXLE9BQU8sQ0FBQzJXLGlCQUFpQixDQUFDZCxXQUFXLENBQUMsRUFBRTtRQUNyRixNQUFNQyxhQUFhLEdBQUdGLFdBQVcsQ0FBQzVWLE9BQU8sRUFBRTZWLFdBQVcsRUFBRTtVQUFFMU07UUFBZSxDQUFDLENBQUM7UUFDM0UzRixJQUFJLElBQUksTUFBTTZSLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLElBQUlPLFdBQVcsS0FBS0MsYUFBYSxFQUFFO1FBQ2pFLElBQUk5VixPQUFPLENBQUM0VyxPQUFPLENBQUNmLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzFPLE9BQU8sRUFBRTBQLHFCQUFxQixJQUFJLEVBQUUsRUFBRXRPLFFBQVEsQ0FBQ3NOLFdBQVcsQ0FBQyxFQUFFO1VBQ2xHclMsSUFBSSxJQUFJLE1BQU02UixNQUFNLENBQUNDLFFBQVEsQ0FBQyxJQUFJTyxXQUFXLGtCQUFrQkksY0FBYyxDQUFDalcsT0FBTyxFQUFFNlYsV0FBVyxFQUFFO1lBQUUxTTtVQUFlLENBQUMsQ0FBQyxFQUFFO1FBQzFIO01BQ0Q7SUFDRDtJQUNBLE9BQU8zRixJQUFJO0VBQ1o7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3NULHFCQUFxQkEsQ0FDN0I5VyxPQUFnQixFQUNoQnNWLFFBQWdCLEVBQ2hCbk8sT0FHQyxFQUNRO0lBQ1QsSUFBSTNELElBQUksR0FBRyxFQUFFO0lBQ2IsTUFBTTJGLGNBQWMsR0FBR2hDLE9BQU8sRUFBRWdDLGNBQWMsS0FBSyxJQUFJO0lBQ3ZELE1BQU1tTixVQUFVLEdBQUduUCxPQUFPLEVBQUVtUCxVQUFVLElBQUksRUFBRTtJQUM1QyxNQUFNUyxlQUFlLEdBQUdyVixNQUFNLENBQUNDLElBQUksQ0FBQzNCLE9BQU8sQ0FBQ3dXLFdBQVcsQ0FBQyxDQUFDLENBQUNRLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDaEUsTUFBTSxDQUFFaUUsR0FBRyxJQUFLLENBQUNYLFVBQVUsQ0FBQy9OLFFBQVEsQ0FBQzBPLEdBQUcsQ0FBQyxDQUFDO0lBQzFIRixlQUFlLENBQUM1TyxJQUFJLENBQUMsQ0FBQztJQUN0QixLQUFLLE1BQU0rTyxjQUFjLElBQUlILGVBQWUsRUFBRTtNQUM3QyxJQUFJSSxnQkFBZ0IsR0FBR25YLE9BQU8sQ0FBQ29YLGNBQWMsQ0FBQ0YsY0FBYyxFQUFFLElBQUksQ0FBQztNQUNuRSxJQUFJQyxnQkFBZ0IsRUFBRTtRQUNyQixJQUFJLENBQUN2USxLQUFLLENBQUNDLE9BQU8sQ0FBQ3NRLGdCQUFnQixDQUFDLEVBQUU7VUFDckNBLGdCQUFnQixHQUFHLENBQUNBLGdCQUFnQixDQUFDO1FBQ3RDO1FBQ0EsSUFBSXZRLEtBQUssQ0FBQ0MsT0FBTyxDQUFDc1EsZ0JBQWdCLENBQUMsSUFBSUEsZ0JBQWdCLENBQUN0UixNQUFNLEtBQUssQ0FBQyxFQUFFO1VBQ3JFc1IsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDOVEsR0FBRyxDQUFFZ1IsdUJBQStCLElBQUs7WUFDNUUsSUFBSSxPQUFPQSx1QkFBdUIsS0FBSyxRQUFRLEVBQUU7Y0FDaEQsT0FBT0MscUJBQXFCLENBQUNDLGFBQWEsQ0FBQ0YsdUJBQXVCLENBQUMsSUFBSSxDQUFDbE8sY0FBYyxHQUNuRixhQUFhLEdBQ2JDLGVBQWUsQ0FBQ2lPLHVCQUF1QixDQUFDO1lBQzVDLENBQUMsTUFBTTtjQUNOLE9BQU9BLHVCQUF1QjtZQUMvQjtVQUNELENBQUMsQ0FBQztVQUNGN1QsSUFBSSxJQUFJLE1BQU02UixNQUFNLENBQUNDLFFBQVEsQ0FBQyxJQUFJNEIsY0FBYyxLQUFLQyxnQkFBZ0IsQ0FBQzNRLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSXJDLFNBQVMsRUFBRTtRQUNqRztNQUNEO0lBQ0Q7SUFDQSxPQUFPWCxJQUFJO0VBQ1o7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU2dVLGVBQWVBLENBQ3ZCeFgsT0FBZ0IsRUFDaEJzVixRQUFnQixFQUNoQm5PLE9BRUMsRUFDUTtJQUNULElBQUkzRCxJQUFJLEdBQUcsRUFBRTtJQUNiLE1BQU1pVSxpQkFBaUIsR0FBRyxDQUFDLG9CQUFvQixFQUFFLFNBQVMsQ0FBQztJQUMzRCxNQUFNbkIsVUFBVSxHQUFHblAsT0FBTyxFQUFFbVAsVUFBVSxJQUFJLEVBQUU7SUFDNUMsTUFBTW9CLFFBQVEsR0FBR2hXLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDM0IsT0FBTyxDQUFDd1csV0FBVyxDQUFDLENBQUMsQ0FBQ21CLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxDQUFDSCxpQkFBaUIsQ0FBQztJQUM1RkMsUUFBUSxDQUFDdlAsSUFBSSxDQUFDLENBQUM7SUFDZixLQUFLLE1BQU0wUCxRQUFRLElBQUlILFFBQVEsRUFBRTtNQUNoQyxJQUFJMVgsT0FBTyxDQUFDOFgsWUFBWSxDQUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDdkIsVUFBVSxDQUFDL04sUUFBUSxDQUFDc1AsUUFBUSxDQUFDLEVBQUU7UUFDckVyVSxJQUFJLElBQUksTUFBTTZSLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLElBQUl1QyxRQUFRLFFBQVE7TUFDbkQ7SUFDRDtJQUNBLE9BQU9yVSxJQUFJO0VBQ1o7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVN1VSxnQkFBZ0JBLENBQy9CQyxrQkFBOEMsRUFDOUM3USxPQU1DLEVBQ21CO0lBQ3BCLElBQUltTyxRQUFRLEdBQUcsQ0FBQztJQUVoQixNQUFNbk0sY0FBYyxHQUFHaEMsT0FBTyxFQUFFZ0MsY0FBYyxLQUFLLElBQUk7SUFDdkQsTUFBTThPLGlCQUFpQixHQUFHO01BQ3pCQyxLQUFLLEVBQUUsU0FBQUEsQ0FBVWxZLE9BQVksRUFBRW1ZLGdCQUF3QixFQUFFO1FBQ3hELE1BQU1wWSxVQUFVLEdBQUdDLE9BQU8sQ0FBQ29ZLGFBQWEsR0FBRyxDQUFDO1FBQzVDLElBQUl4UixLQUFLLENBQUNDLE9BQU8sQ0FBQzlHLFVBQVUsQ0FBQyxJQUFJQSxVQUFVLENBQUM4RixNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ3ZEOUYsVUFBVSxDQUFDb0ksSUFBSSxDQUFDLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxLQUFLRCxDQUFDLENBQUNpUSxNQUFNLENBQUMsQ0FBQyxDQUFDL1AsYUFBYSxDQUFDRCxDQUFDLENBQUNnUSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDL0RyWSxPQUFPLENBQUNzWSxtQkFBbUIsQ0FBQyxDQUFDO1VBQzdCLEtBQUssTUFBTUMsRUFBRSxJQUFJeFksVUFBVSxFQUFFO1lBQzVCQyxPQUFPLENBQUN3WSxhQUFhLENBQUNELEVBQUUsQ0FBQztVQUMxQjtRQUNEO1FBQ0EsSUFBSUUsYUFBYSxHQUFHLEVBQUU7UUFDdEIsSUFBSU4sZ0JBQWdCLEVBQUU7VUFDckIsSUFBSW5ZLE9BQU8sQ0FBQzBZLFNBQVMsQ0FBQyxDQUFDLEVBQUU7WUFDeEIsTUFBTUMsYUFBYSxHQUFJM1ksT0FBTyxDQUFDMFksU0FBUyxDQUFDLENBQUMsQ0FBQ0UsY0FBYyxDQUFDVCxnQkFBZ0IsQ0FBQyxFQUFzQlUsT0FBTyxHQUFHN1ksT0FBTyxDQUFDO1lBQ25ILElBQUkyWSxhQUFhLEdBQUcsQ0FBQyxFQUFFO2NBQ3RCRixhQUFhLElBQUksTUFBTXBELE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLEVBQUU7WUFDMUM7VUFDRDtRQUNEO1FBRUFtRCxhQUFhLElBQUksR0FBR3pZLE9BQU8sQ0FBQ3dXLFdBQVcsQ0FBQyxDQUFDLENBQUNzQyxPQUFPLENBQUMsQ0FBQyxHQUFHO1FBQ3RELE9BQU9MLGFBQWE7TUFDckIsQ0FBQztNQUNETSxHQUFHLEVBQUUsU0FBQUEsQ0FBQSxFQUFZO1FBQ2hCLE9BQU8sSUFBSTtNQUNaLENBQUM7TUFDREMsTUFBTSxFQUFFLFNBQUFBLENBQVVoWixPQUFZLEVBQUU7UUFDL0IsSUFBSWlSLEVBQUUsR0FBR2pSLE9BQU8sQ0FBQ2laLEtBQUssQ0FBQyxDQUFDO1FBQ3hCaEksRUFBRSxHQUFHLE9BQU9BLEVBQUUsS0FBSyxRQUFRLEdBQUc3SCxlQUFlLENBQUM2SCxFQUFFLENBQUMsR0FBR0EsRUFBRTtRQUN0RCxJQUFJek4sSUFBSSxHQUFHLFFBQVE4VCxxQkFBcUIsQ0FBQ0MsYUFBYSxDQUFDdEcsRUFBRSxDQUFDLElBQUksQ0FBQzlILGNBQWMsR0FBRyxhQUFhLEdBQUc4SCxFQUFFLEVBQUU7UUFDcEd6TixJQUFJLElBQUk2UyxtQkFBbUIsQ0FBQ3JXLE9BQU8sRUFBRXNWLFFBQVEsRUFBRW5PLE9BQU8sQ0FBQztRQUN2RCxJQUFJbkgsT0FBTyxDQUFDa1osYUFBYSxFQUFFQyxPQUFPLElBQUksT0FBT25aLE9BQU8sQ0FBQ2taLGFBQWEsRUFBRUMsT0FBTyxLQUFLLFFBQVEsRUFBRTtVQUN6RjtVQUNBM1YsSUFBSSxJQUFJLE1BQU02UixNQUFNLENBQUNDLFFBQVEsQ0FBQyxhQUFhdFYsT0FBTyxDQUFDa1osYUFBYSxDQUFDQyxPQUFPLEVBQUU7UUFDM0U7UUFDQTNWLElBQUksSUFBSXNULHFCQUFxQixDQUFDOVcsT0FBTyxFQUFFc1YsUUFBUSxFQUFFbk8sT0FBTyxDQUFDO1FBQ3pELElBQUlBLE9BQU8sRUFBRWlTLHNCQUFzQixLQUFLLElBQUksSUFBSXBaLE9BQU8sQ0FBQ3FaLG1CQUFtQixFQUFFeFQsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUN4RnJDLElBQUksSUFBSSxNQUFNNlIsTUFBTSxDQUFDQyxRQUFRLENBQUMseUJBQXlCdFYsT0FBTyxDQUFDcVosbUJBQW1CLENBQUM3UyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDaEc7UUFDQWhELElBQUksSUFBSWdVLGVBQWUsQ0FBQ3hYLE9BQU8sRUFBRXNWLFFBQVEsRUFBRW5PLE9BQU8sQ0FBQztRQUNuRCxPQUFPM0QsSUFBSTtNQUNaLENBQUM7TUFDRDhWLGdCQUFnQixFQUFFLFNBQUFBLENBQVV0WixPQUFzRSxFQUFFdVosS0FBYSxFQUFFO1FBQ2xILElBQUlDLEdBQUcsR0FBRyxNQUFNbkUsTUFBTSxDQUFDQyxRQUFRLENBQUMsR0FBR2lFLEtBQUssRUFBRTtRQUMxQ2pFLFFBQVEsRUFBRTtRQUVWLElBQUl0VixPQUFPLENBQUN5WixhQUFhLENBQUNGLEtBQUssQ0FBQyxFQUFFO1VBQ2pDQyxHQUFHLElBQUksWUFBWXhaLE9BQU8sQ0FBQ3laLGFBQWEsQ0FBQ0YsS0FBSyxDQUFDLENBQUNsUCxJQUFJLGlCQUFpQmdMLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLEVBQUU7UUFDeEYsQ0FBQyxNQUFNO1VBQ05rRSxHQUFHLElBQUksT0FBT25FLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLEVBQUU7UUFDakM7UUFDQSxPQUFPa0UsR0FBRztNQUNYLENBQUM7TUFDREUsY0FBYyxFQUFFLFNBQUFBLENBQVUxWixPQUFZLEVBQUV1WixLQUFhLEVBQUU7UUFDdERqRSxRQUFRLEVBQUU7UUFDVixJQUFJdFYsT0FBTyxDQUFDeVosYUFBYSxDQUFDRixLQUFLLENBQUMsRUFBRTtVQUNqQyxPQUFPLEtBQUtsRSxNQUFNLENBQUNDLFFBQVEsQ0FBQyxHQUFHO1FBQ2hDLENBQUMsTUFBTTtVQUNOLE9BQU8sS0FBS0QsTUFBTSxDQUFDQyxRQUFRLENBQUMsR0FBRztRQUNoQztNQUNEO0lBQ0QsQ0FBQztJQUNELElBQUkxTyxLQUFLLENBQUNDLE9BQU8sQ0FBQ21SLGtCQUFrQixDQUFDLEVBQUU7TUFDdEMsT0FBT0Esa0JBQWtCLENBQUMzUixHQUFHLENBQUVzVCxlQUEyQixJQUFLO1FBQzlELE9BQU8sSUFBSUMsVUFBVSxDQUFDRCxlQUFlLEVBQUUxQixpQkFBaUIsQ0FBQyxDQUFDNEIsU0FBUyxDQUFDLENBQUM7TUFDdEUsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNO01BQ04sT0FBTyxJQUFJRCxVQUFVLENBQUM1QixrQkFBa0IsRUFBRUMsaUJBQWlCLENBQUMsQ0FBQzRCLFNBQVMsQ0FBQyxDQUFDO0lBQ3pFO0VBQ0Q7RUFBQ3BULFFBQUEsQ0FBQXNSLGdCQUFBLEdBQUFBLGdCQUFBO0VBRU0sU0FBUytCLHFCQUFxQkEsQ0FDcEM5QixrQkFBMkQsRUFJMUQ7SUFBQSxJQUhEb0Isc0JBQXNCLEdBQUF0UCxTQUFBLENBQUFqRSxNQUFBLFFBQUFpRSxTQUFBLFFBQUEzRixTQUFBLEdBQUEyRixTQUFBLE1BQUcsS0FBSztJQUFBLElBQzlCaVEsV0FBVyxHQUFBalEsU0FBQSxDQUFBakUsTUFBQSxRQUFBaUUsU0FBQSxRQUFBM0YsU0FBQSxHQUFBMkYsU0FBQSxNQUFHLEtBQUs7SUFBQSxJQUNuQndNLFVBQW9CLEdBQUF4TSxTQUFBLENBQUFqRSxNQUFBLFFBQUFpRSxTQUFBLFFBQUEzRixTQUFBLEdBQUEyRixTQUFBLE1BQUcsRUFBRTtJQUV6QixJQUFJd0wsUUFBUSxHQUFHLENBQUM7SUFDaEIsTUFBTTBFLGlCQUF5QyxHQUFHLENBQUMsQ0FBQztJQUVwRCxTQUFTQyxpQkFBaUJBLENBQUNDLFNBQWlCLEVBQVU7TUFDckQsTUFBTUMsVUFBVSxHQUFHRCxTQUFTLENBQUNFLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDdkMsTUFBTUMsU0FBUyxHQUFHRixVQUFVLENBQUM1VCxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3pDLElBQUkrVCxjQUFjLEdBQUdELFNBQVMsQ0FBQ0EsU0FBUyxDQUFDeFUsTUFBTSxHQUFHLENBQUMsQ0FBQztNQUNwRCxJQUFJcEUsa0JBQWtCLENBQUM0WSxTQUFTLENBQUM3VCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUM1QzhULGNBQWMsR0FBRzdZLGtCQUFrQixDQUFDNFksU0FBUyxDQUFDN1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3pEO01BQ0EsSUFBSThULGNBQWMsS0FBS25XLFNBQVMsRUFBRTtRQUNqQ21XLGNBQWMsR0FBRyxNQUFNO01BQ3hCO01BQ0EsT0FBT0EsY0FBYztJQUN0QjtJQUVBLE1BQU1yQyxpQkFBaUIsR0FBRztNQUN6QkMsS0FBSyxFQUFFLFNBQUFBLENBQVVsWSxPQUFZLEVBQUVtWSxnQkFBd0IsRUFBRTtRQUN4RCxJQUFJTSxhQUFhLEdBQUcsRUFBRTtRQUN0QixJQUFJTixnQkFBZ0IsRUFBRTtVQUNyQixJQUFJblksT0FBTyxDQUFDMFksU0FBUyxDQUFDLENBQUMsRUFBRTtZQUN4QixNQUFNQyxhQUFhLEdBQUkzWSxPQUFPLENBQUMwWSxTQUFTLENBQUMsQ0FBQyxDQUFDRSxjQUFjLENBQUNULGdCQUFnQixDQUFDLEVBQXNCVSxPQUFPLEdBQUc3WSxPQUFPLENBQUM7WUFDbkgsSUFBSTJZLGFBQWEsR0FBRyxDQUFDLEVBQUU7Y0FDdEJGLGFBQWEsSUFBSSxLQUFLcEQsTUFBTSxDQUFDQyxRQUFRLENBQUMsRUFBRTtZQUN6QztVQUNEO1FBQ0Q7UUFDQSxNQUFNaUYsUUFBUSxHQUFHdmEsT0FBTyxDQUFDd1csV0FBVyxDQUFDLENBQUMsQ0FBQ3NDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELE1BQU1xQixVQUFVLEdBQUdJLFFBQVEsQ0FBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUN0QyxNQUFNclYsSUFBSSxHQUFHb1YsVUFBVSxDQUFDQSxVQUFVLENBQUN0VSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU15VSxjQUFjLEdBQUdMLGlCQUFpQixDQUFDTSxRQUFRLENBQUM7UUFDbEQ5QixhQUFhLElBQUksSUFBSTZCLGNBQWMsSUFBSXZWLElBQUksSUFBSTtRQUMvQyxJQUFJLENBQUNpVixpQkFBaUIsQ0FBQ00sY0FBYyxDQUFDLEVBQUU7VUFDdkNOLGlCQUFpQixDQUFDTSxjQUFjLENBQUMsR0FBRyxDQUFDO1VBQ3JDN0IsYUFBYSxJQUFJLEdBQUdwRCxNQUFNLENBQUNDLFFBQVEsQ0FBQyxTQUFTZ0YsY0FBYyxLQUFLL2EsWUFBWSxDQUFDK2EsY0FBYyxDQUFDLEtBQUs7UUFDbEcsQ0FBQyxNQUFNO1VBQ05OLGlCQUFpQixDQUFDTSxjQUFjLENBQUMsRUFBRTtRQUNwQztRQUNBLE9BQU83QixhQUFhO01BQ3JCLENBQUM7TUFDRE0sR0FBRyxFQUFFLFNBQUFBLENBQVUvWSxPQUFZLEVBQUU7UUFDNUIsTUFBTXVhLFFBQVEsR0FBR3ZhLE9BQU8sQ0FBQ3dXLFdBQVcsQ0FBQyxDQUFDLENBQUNzQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNcUIsVUFBVSxHQUFHSSxRQUFRLENBQUNILEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDdEMsTUFBTXJWLElBQUksR0FBR29WLFVBQVUsQ0FBQ0EsVUFBVSxDQUFDdFUsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUM5QyxNQUFNeVUsY0FBYyxHQUFHTCxpQkFBaUIsQ0FBQ00sUUFBUSxDQUFDO1FBQ2xELElBQUlDLGNBQWMsR0FBRyxLQUFLO1FBQzFCLEtBQUssTUFBTUMsZ0JBQWdCLElBQUl6YSxPQUFPLENBQUNrWixhQUFhLEVBQUU7VUFDckQsSUFDRSxDQUFDdFMsS0FBSyxDQUFDQyxPQUFPLENBQUM3RyxPQUFPLENBQUNrWixhQUFhLENBQUN1QixnQkFBZ0IsQ0FBQyxDQUFDLElBQ3ZEemEsT0FBTyxDQUFDa1osYUFBYSxDQUFDdUIsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLElBQ2hEemEsT0FBTyxDQUFDa1osYUFBYSxDQUFDdUIsZ0JBQWdCLENBQUMsS0FBS3RXLFNBQVMsSUFDckR5QyxLQUFLLENBQUNDLE9BQU8sQ0FBQzdHLE9BQU8sQ0FBQ2taLGFBQWEsQ0FBQ3VCLGdCQUFnQixDQUFDLENBQUMsSUFBSXphLE9BQU8sQ0FBQ2taLGFBQWEsQ0FBQ3VCLGdCQUFnQixDQUFDLENBQUM1VSxNQUFNLEdBQUcsQ0FBRSxFQUM3RztZQUNEMlUsY0FBYyxHQUFHLElBQUk7VUFDdEI7UUFDRDtRQUNBUixpQkFBaUIsQ0FBQ00sY0FBYyxDQUFDLEVBQUU7UUFDbkMsSUFBSUUsY0FBYyxFQUFFO1VBQ25CLE9BQU8sS0FBS0YsY0FBYyxJQUFJdlYsSUFBSSxHQUFHO1FBQ3RDLENBQUMsTUFBTTtVQUNOLE9BQU8sSUFBSTtRQUNaO01BQ0QsQ0FBQztNQUNEaVUsTUFBTSxFQUFFLFNBQUFBLENBQVVoWixPQUFZLEVBQUU7UUFDL0IsSUFBSWlSLEVBQUUsR0FBR2pSLE9BQU8sQ0FBQ2laLEtBQUssQ0FBQyxDQUFDO1FBQ3hCaEksRUFBRSxHQUFHLE9BQU9BLEVBQUUsS0FBSyxRQUFRLEdBQUc3SCxlQUFlLENBQUM2SCxFQUFFLENBQUMsR0FBR0EsRUFBRTtRQUN0RCxJQUFJek4sSUFBSSxHQUFHLEVBQUU7UUFDYixJQUFJLENBQUM4VCxxQkFBcUIsQ0FBQ0MsYUFBYSxDQUFDdEcsRUFBRSxDQUFDLEVBQUU7VUFDN0N6TixJQUFJLEdBQUcsT0FBT3lOLEVBQUUsR0FBRztRQUNwQjtRQUNBLElBQUl0UCxJQUFJLEdBQUdELE1BQU0sQ0FBQ0MsSUFBSSxDQUFDM0IsT0FBTyxDQUFDMGEsV0FBVyxDQUFDLENBQ3pDMUgsTUFBTSxDQUFFMkgsUUFBUSxJQUFLQSxRQUFRLEtBQUssSUFBSSxDQUFDLENBQ3ZDL0MsTUFBTSxDQUFDbFcsTUFBTSxDQUFDQyxJQUFJLENBQUMzQixPQUFPLENBQUN5WixhQUFhLENBQUMsQ0FBQyxDQUMxQzdCLE1BQU0sQ0FBQ2xXLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDM0IsT0FBTyxDQUFDd1csV0FBVyxDQUFDLENBQUMsQ0FBQ1Esa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDL0RZLE1BQU0sQ0FBQ2xXLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDM0IsT0FBTyxDQUFDNGEsY0FBYyxDQUFDLENBQUMsQ0FDM0M1SCxNQUFNLENBQUUySCxRQUFRLElBQUssQ0FBQ3JFLFVBQVUsQ0FBQy9OLFFBQVEsQ0FBQ29TLFFBQVEsQ0FBQyxDQUFDO1FBQ3REaFosSUFBSSxHQUFHQSxJQUFJLENBQUN3RyxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQUtELENBQUMsQ0FBQ0UsYUFBYSxDQUFDRCxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNd1MsVUFBVSxHQUFHLElBQUlDLEdBQUcsQ0FBQ25aLElBQUksQ0FBQztRQUNoQ0EsSUFBSSxHQUFHaUYsS0FBSyxDQUFDbVUsSUFBSSxDQUFDRixVQUFVLENBQUM7UUFDN0IsS0FBSyxNQUFNRyxXQUFXLElBQUlyWixJQUFJLEVBQUU7VUFDL0IsSUFBSSxDQUFDb1ksV0FBVyxJQUFJL1osT0FBTyxDQUFDeVosYUFBYSxDQUFDeFcsY0FBYyxDQUFDK1gsV0FBVyxDQUFDLEVBQUU7WUFDdEUsTUFBTTlFLGFBQWEsR0FBRztjQUFFLEdBQUdsVyxPQUFPLENBQUN5WixhQUFhLENBQUN1QixXQUFXO1lBQUUsQ0FBQztZQUMvRCxJQUFJOUUsYUFBYSxDQUFDN0csYUFBYSxFQUFFO2NBQ2hDN0wsSUFBSSxJQUFJLEtBQUs2UixNQUFNLENBQUNDLFFBQVEsQ0FBQyxHQUFHMEYsV0FBVyxLQUFLOUUsYUFBYSxDQUFDN0csYUFBYSxDQUFDckssT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztZQUNwRyxDQUFDLE1BQU07Y0FDTixJQUFJa1IsYUFBYSxDQUFDNUUsSUFBSSxFQUFFNkUsYUFBYSxFQUFFO2dCQUN0QyxPQUFPRCxhQUFhLENBQUM1RSxJQUFJLENBQUM2RSxhQUFhO2NBQ3hDO2NBRUEsSUFBSUQsYUFBYSxDQUFDRSxPQUFPLEVBQUU7Z0JBQzFCLE9BQU9GLGFBQWEsQ0FBQ0UsT0FBTztjQUM3QjtjQUNBLElBQUlGLGFBQWEsQ0FBQytFLFFBQVEsRUFBRTtnQkFDM0IsT0FBTy9FLGFBQWEsQ0FBQytFLFFBQVE7Y0FDOUI7Y0FDQXpYLElBQUksSUFBSSxLQUFLNlIsTUFBTSxDQUFDQyxRQUFRLENBQUMsR0FBRzBGLFdBQVcsS0FBS2pGLElBQUksQ0FBQ0MsU0FBUyxDQUFDRSxhQUFhLENBQUMsR0FBRztZQUNqRjtVQUNELENBQUMsTUFBTSxJQUFJbFcsT0FBTyxDQUFDMGEsV0FBVyxDQUFDelgsY0FBYyxDQUFDK1gsV0FBVyxDQUFDLElBQUloYixPQUFPLENBQUMwYSxXQUFXLENBQUNNLFdBQVcsQ0FBQyxLQUFLN1csU0FBUyxFQUFFO1lBQzdHLElBQUkyUixhQUFhLEdBQUc5VixPQUFPLENBQUMwYSxXQUFXLENBQUNNLFdBQVcsQ0FBQztZQUNwRCxJQUFJLE9BQU9sRixhQUFhLEtBQUssUUFBUSxFQUFFO2NBQ3RDQSxhQUFhLEdBQUcxTSxlQUFlLENBQUMwTSxhQUFhLENBQUMsQ0FBQzlRLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1lBQ3ZFO1lBQ0EsSUFBSTtjQUNIOFEsYUFBYSxHQUNaLE9BQU9BLGFBQWEsS0FBSyxRQUFRLEdBQUdDLElBQUksQ0FBQ0MsU0FBUyxDQUFDRixhQUFhLENBQUMsQ0FBQzlRLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUc4USxhQUFhO1lBQzNHLENBQUMsQ0FBQyxPQUFPL0MsQ0FBQyxFQUFFO2NBQ1g7WUFBQTtZQUdEdlAsSUFBSSxJQUFJLEtBQUs2UixNQUFNLENBQUNDLFFBQVEsQ0FBQyxJQUFJMEYsV0FBVyxLQUFLbEYsYUFBYSxHQUFHO1VBQ2xFLENBQUMsTUFBTSxJQUFJOVYsT0FBTyxDQUFDb1gsY0FBYyxDQUFDNEQsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3JELElBQUk3RCxnQkFBZ0IsR0FBR25YLE9BQU8sQ0FBQ29YLGNBQWMsQ0FBQzRELFdBQVcsRUFBRSxJQUFJLENBQUM7WUFDaEUsSUFBSSxDQUFDcFUsS0FBSyxDQUFDQyxPQUFPLENBQUNzUSxnQkFBZ0IsQ0FBQyxFQUFFO2NBQ3JDQSxnQkFBZ0IsR0FBRyxDQUFDQSxnQkFBZ0IsQ0FBQztZQUN0QztZQUNBQSxnQkFBZ0IsR0FBR0EsZ0JBQWdCLENBQUM5USxHQUFHLENBQUVnUix1QkFBK0IsSUFBSztjQUM1RSxPQUFPLE9BQU9BLHVCQUF1QixLQUFLLFFBQVEsR0FDL0NqTyxlQUFlLENBQUNpTyx1QkFBdUIsQ0FBQyxHQUN4Q0EsdUJBQXVCO1lBQzNCLENBQUMsQ0FBQztZQUVGN1QsSUFBSSxJQUFJLEtBQUs2UixNQUFNLENBQUNDLFFBQVEsQ0FBQyxJQUFJMEYsV0FBVyxLQUFLLENBQUM3RCxnQkFBZ0IsRUFBRTNRLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSTJRLGdCQUFnQixLQUFLaFQsU0FBUyxHQUFHO1VBQ3JILENBQUMsTUFBTSxJQUFJbkUsT0FBTyxDQUFDNGEsY0FBYyxDQUFDM1gsY0FBYyxDQUFDK1gsV0FBVyxDQUFDLEVBQUU7WUFDOUQsSUFBSWhiLE9BQU8sQ0FBQzRhLGNBQWMsQ0FBQ0ksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVFLFNBQVMsRUFBRW5XLElBQUksRUFBRTtjQUM1RHZCLElBQUksSUFBSSxLQUFLNlIsTUFBTSxDQUFDQyxRQUFRLENBQUMsSUFBSTBGLFdBQVcsS0FBS2hiLE9BQU8sQ0FBQzRhLGNBQWMsQ0FBQ0ksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVFLFNBQVMsRUFBRW5XLElBQUksR0FBRztZQUM1RyxDQUFDLE1BQU07Y0FDTnZCLElBQUksSUFBSSxLQUFLNlIsTUFBTSxDQUFDQyxRQUFRLENBQUMsSUFBSTBGLFdBQVcscUJBQXFCO1lBQ2xFO1VBQ0Q7UUFDRDtRQUNBLElBQUk1QixzQkFBc0IsSUFBSXBaLE9BQU8sQ0FBQ3FaLG1CQUFtQixFQUFFeFQsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUN0RXJDLElBQUksSUFBSSxLQUFLNlIsTUFBTSxDQUFDQyxRQUFRLENBQUMseUJBQXlCdFYsT0FBTyxDQUFDcVosbUJBQW1CLENBQUM3UyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDL0Y7UUFDQWhELElBQUksSUFBSSxJQUFJO1FBQ1osSUFBSWdYLGNBQWMsR0FBRyxLQUFLO1FBQzFCLEtBQUssTUFBTUMsZ0JBQWdCLElBQUl6YSxPQUFPLENBQUNrWixhQUFhLEVBQUU7VUFDckQsSUFDRSxDQUFDdFMsS0FBSyxDQUFDQyxPQUFPLENBQUM3RyxPQUFPLENBQUNrWixhQUFhLENBQUN1QixnQkFBZ0IsQ0FBQyxDQUFDLElBQ3ZEemEsT0FBTyxDQUFDa1osYUFBYSxDQUFDdUIsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLElBQ2hEemEsT0FBTyxDQUFDa1osYUFBYSxDQUFDdUIsZ0JBQWdCLENBQUMsS0FBS3RXLFNBQVMsSUFDckR5QyxLQUFLLENBQUNDLE9BQU8sQ0FBQzdHLE9BQU8sQ0FBQ2taLGFBQWEsQ0FBQ3VCLGdCQUFnQixDQUFDLENBQUMsSUFBSXphLE9BQU8sQ0FBQ2taLGFBQWEsQ0FBQ3VCLGdCQUFnQixDQUFDLENBQUM1VSxNQUFNLEdBQUcsQ0FBRSxFQUM3RztZQUNEMlUsY0FBYyxHQUFHLElBQUk7VUFDdEI7UUFDRDtRQUNBLElBQUlBLGNBQWMsRUFBRTtVQUNuQmhYLElBQUksSUFBSSxHQUFHO1FBQ1o7UUFDQSxPQUFPQSxJQUFJO01BQ1osQ0FBQztNQUNEOFYsZ0JBQWdCLEVBQUUsU0FBQUEsQ0FBVXRaLE9BQVksRUFBRXVaLEtBQWEsRUFBRTtRQUN4RCxNQUFNZSxjQUFjLEdBQUdMLGlCQUFpQixDQUFDamEsT0FBTyxDQUFDd1csV0FBVyxDQUFDLENBQUMsQ0FBQ3NDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSVUsR0FBRyxHQUFHLEtBQUtuRSxNQUFNLENBQUNDLFFBQVEsQ0FBQyxJQUFJZ0YsY0FBYyxJQUFJZixLQUFLLEdBQUc7UUFDN0RqRSxRQUFRLEVBQUU7UUFDVmtFLEdBQUcsSUFBSSxLQUFLbkUsTUFBTSxDQUFDQyxRQUFRLENBQUMsRUFBRTtRQUM5QixPQUFPa0UsR0FBRztNQUNYLENBQUM7TUFDREUsY0FBYyxFQUFFLFNBQUFBLENBQVUxWixPQUFZLEVBQUV1WixLQUFhLEVBQUU7UUFDdERqRSxRQUFRLEVBQUU7UUFDVixNQUFNZ0YsY0FBYyxHQUFHTCxpQkFBaUIsQ0FBQ2phLE9BQU8sQ0FBQ3dXLFdBQVcsQ0FBQyxDQUFDLENBQUNzQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUk5WSxPQUFPLENBQUN5WixhQUFhLENBQUNGLEtBQUssQ0FBQyxFQUFFO1VBQ2pDLE9BQU8sS0FBS2xFLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLEtBQUtnRixjQUFjLElBQUlmLEtBQUssS0FBSztRQUM5RCxDQUFDLE1BQU07VUFDTixPQUFPLEtBQUtsRSxNQUFNLENBQUNDLFFBQVEsQ0FBQyxLQUFLZ0YsY0FBYyxJQUFJZixLQUFLLEtBQUs7UUFDOUQ7TUFDRDtJQUNELENBQUM7SUFDRCxJQUFJNEIsTUFBTTtJQUNWLElBQUl2VSxLQUFLLENBQUNDLE9BQU8sQ0FBQ21SLGtCQUFrQixDQUFDLEVBQUU7TUFDdENtRCxNQUFNLEdBQUduRCxrQkFBa0IsQ0FBQzNSLEdBQUcsQ0FBRXNULGVBQThCLElBQUs7UUFDbkUsT0FBTyxJQUFJQyxVQUFVLENBQUNELGVBQWUsRUFBRTFCLGlCQUFpQixDQUFDLENBQUM0QixTQUFTLENBQUMsQ0FBQztNQUN0RSxDQUFDLENBQUM7SUFDSCxDQUFDLE1BQU07TUFDTnNCLE1BQU0sR0FBRyxJQUFJdkIsVUFBVSxDQUFDNUIsa0JBQWtCLEVBQUVDLGlCQUFpQixDQUFDLENBQUM0QixTQUFTLENBQUMsQ0FBQztJQUMzRTtJQUNBLE9BQU8vUyxTQUFTLENBQUMsU0FBU3FVLE1BQU0sU0FBUyxDQUFDO0VBQzNDO0VBQUMxVSxRQUFBLENBQUFxVCxxQkFBQSxHQUFBQSxxQkFBQTtFQUVNLFNBQVNzQixhQUFhQSxDQUFBLEVBQUc7SUFDL0IsSUFBSUMsU0FBb0I7SUFDeEIsTUFBTUMsU0FBUyxHQUFHLElBQUlySixPQUFPLENBQUUzSCxPQUFPLElBQUs7TUFDMUMrUSxTQUFTLEdBQUcvUSxPQUFPO0lBQ3BCLENBQUMsQ0FBQztJQUNGLE9BQU87TUFBRWlSLE9BQU8sRUFBRUQsU0FBUztNQUFFaFIsT0FBTyxFQUFFK1E7SUFBVSxDQUFDO0VBQ2xEO0VBQUM1VSxRQUFBLENBQUEyVSxhQUFBLEdBQUFBLGFBQUE7RUFFTSxTQUFTSSxxQkFBcUJBLENBQUEsRUFBaUQ7SUFBQSxTQUFBQyxLQUFBLEdBQUEzUixTQUFBLENBQUFqRSxNQUFBLEVBQTdDa1AsU0FBUyxPQUFBbk8sS0FBQSxDQUFBNlUsS0FBQSxHQUFBQyxLQUFBLE1BQUFBLEtBQUEsR0FBQUQsS0FBQSxFQUFBQyxLQUFBO01BQVQzRyxTQUFTLENBQUEyRyxLQUFBLElBQUE1UixTQUFBLENBQUE0UixLQUFBO0lBQUE7SUFDakQ7SUFDQSxNQUFNQyxvQkFBb0IsR0FBSUMsb0JBQW9CLENBQVNDLG1CQUFtQjtJQUM5RTtJQUNBLE1BQU1DLGdCQUFnQixHQUFHemMsSUFBSSxDQUFDMFMsS0FBSyxDQUFDNkosb0JBQW9CLEVBQVMscUJBQXFCLENBQUM7SUFDdkZFLGdCQUFnQixDQUFDQyxrQkFBa0IsQ0FBRSxDQUFDQyxZQUFvQixFQUFFQyxTQUFpQixLQUFLO01BQ2pGLEtBQUssTUFBTWhILFFBQVEsSUFBSUYsU0FBUyxFQUFFO1FBQ2pDLElBQUlFLFFBQVEsQ0FBQ2xRLElBQUksS0FBS2lYLFlBQVksRUFBRTtVQUNuQyxPQUFPRSxjQUFjLENBQUNqSCxRQUFRLENBQUN4RSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0M7TUFDRDtNQUNBLE9BQU9rTCxvQkFBb0IsQ0FBQ0ssWUFBWSxFQUFFQyxTQUFTLENBQUM7SUFDckQsQ0FBaUMsQ0FBQztJQUNsQyxPQUFPSCxnQkFBZ0I7RUFDeEI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFaQXJWLFFBQUEsQ0FBQStVLHFCQUFBLEdBQUFBLHFCQUFBO0VBYU8sZUFBZVcsc0JBQXNCQSxDQUMzQ2hWLE9BU0MsRUFDRHBDLElBQWEsRUFDYnFYLFNBQWtCLEVBQzhEO0lBQ2hGL2MsSUFBSSxDQUFDMFMsS0FBSyxDQUFDc0ssVUFBVSxDQUFDQyxTQUFTLEVBQUUsMkJBQTJCLENBQUMsQ0FBQ2hZLGVBQWUsQ0FBQ0gsU0FBUyxDQUFDO0lBQ3hGLElBQUlvWSxPQUFPLEdBQUdwVixPQUFPLEVBQUVvVixPQUFPO0lBQzlCLElBQUksQ0FBQ0EsT0FBTyxFQUFFO01BQ2JBLE9BQU8sR0FBRzNTLFVBQVUsQ0FBQ1MsSUFBSSxDQUFDN0QsSUFBSSxDQUFDZ1csU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDbEU7SUFDQSxNQUFNQyxJQUFJLEdBQUd0VixPQUFPLEVBQUVzVixJQUFJLElBQUlDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLE1BQU16TCxFQUFFLEdBQUc5SixPQUFPLEVBQUVvTCxXQUFXLElBQUksZUFBZWtLLElBQUksRUFBRTtJQUN4RCxNQUFNRSxVQUFVLEdBQUczUyxFQUFFLENBQUNDLFlBQVksQ0FBQ3NTLE9BQU8sQ0FBQyxDQUFDelIsUUFBUSxDQUFDLENBQUM7SUFDdER6RCxNQUFNLENBQUN1VixPQUFPLENBQUNDLE9BQU8sQ0FBQyxxQkFBcUJKLElBQUksNEJBQTRCLEVBQUVFLFVBQVUsQ0FBQztJQUN6RixJQUFJLENBQUN4VixPQUFPLEVBQUUyVixXQUFXLEVBQUU7TUFDMUJ6ZCxJQUFJLENBQUMwUyxLQUFLLENBQUNnTCxjQUFjLENBQUNULFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDUCxrQkFBa0IsQ0FBQzFjLElBQUksQ0FBQzJFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUY7SUFBQyxJQUNLZ1osa0JBQWtCLDBCQUFBQyxlQUFBO01BQUEsU0FBQUQsbUJBQUE7UUFBQSxPQUFBQyxlQUFBLENBQUFyTixLQUFBLE9BQUE5RixTQUFBO01BQUE7TUFBQW9ULGNBQUEsQ0FBQUYsa0JBQUEsRUFBQUMsZUFBQTtNQUFBLElBQUFFLE1BQUEsR0FBQUgsa0JBQUEsQ0FBQVYsU0FBQTtNQUFBYSxNQUFBLENBQ3ZCQyxNQUFNLEdBQU4sU0FBQUEsTUFBTUEsQ0FBQSxFQUFHO1FBQ1IsT0FBT0MsSUFBQSxDQUFDQyxJQUFJLElBQU8sQ0FBQztNQUNyQixDQUFDO01BQUEsT0FBQU4sa0JBQUE7SUFBQSxFQUgrQkQsY0FBYztJQUsvQ1EsR0FBRyxDQUFDQyxFQUFFLENBQUNDLE1BQU0sQ0FBQyxlQUFlaEIsSUFBSSxZQUFZLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLFVBQVVpQixhQUEyQixFQUFFO01BQ25ILFlBQVk7O01BRVosT0FBT0MsWUFBWSxDQUFDclksTUFBTSxDQUFDLGVBQWVtWCxJQUFJLFlBQVksRUFBRTtRQUMzRG1CLFFBQVEsRUFBRTtVQUNUQyxRQUFRLEVBQUU7WUFDVCxTQUFTLEVBQUU7Y0FDVjVNLEVBQUUsRUFBRSxPQUFPd0wsSUFBSSxFQUFFO2NBQ2pCcUIsS0FBSyxFQUFFLFdBQVc7Y0FDbEJDLFdBQVcsRUFBRTtnQkFDWkMsV0FBVyxFQUFFO2tCQUNaQyxHQUFHLEVBQUUscUJBQXFCeEIsSUFBSSxHQUFHO2tCQUNqQ25MLElBQUksRUFBRSxPQUFPO2tCQUNiN04sUUFBUSxFQUFFO29CQUNUeWEsWUFBWSxFQUFFO2tCQUNmO2dCQUNEO2NBQ0Q7WUFDRCxDQUFDO1lBQ0QsU0FBUyxFQUFFO2NBQ1Z4YSxNQUFNLEVBQUU7Z0JBQ1AsRUFBRSxFQUFFO2tCQUNIeWEsVUFBVSxFQUFFLGFBQWE7a0JBQ3pCMWEsUUFBUSxFQUFFLENBQUM7Z0JBQ1o7Y0FDRCxDQUFDO2NBQ0QyYSxPQUFPLEVBQUU7Z0JBQ1JDLE9BQU8sRUFBRTtrQkFDUkMsT0FBTyxFQUFFO29CQUNSaE4sSUFBSSxFQUFFLFdBQVc7b0JBQ2pCdk0sSUFBSSxFQUFFQSxJQUFJLElBQUksaUJBQWlCO29CQUMvQmtNLEVBQUUsRUFBRSxTQUFTO29CQUNibUwsU0FBUyxFQUFFQSxTQUFTO29CQUNwQmpWLE9BQU8sRUFBRTtzQkFDUjFELFFBQVEsRUFBRTt3QkFDVCxJQUFJMEQsT0FBTyxFQUFFdUcsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3BDSSxXQUFXLEVBQUUzRyxPQUFPLEVBQUVvWCxlQUFlLElBQUksV0FBVzt3QkFDcERDLFFBQVEsRUFBRSxLQUFLO3dCQUNmQyxXQUFXLEVBQUV0WCxPQUFPLEVBQUUyVixXQUFXLElBQUlFLGtCQUFrQjt3QkFDdkR2TSxPQUFPLEVBQUV0SixPQUFPLEVBQUVzSjtzQkFDbkI7b0JBQ0Q7a0JBQ0Q7Z0JBQ0QsQ0FBQztnQkFDRGlPLE1BQU0sRUFBRSxDQUNQO2tCQUNDQyxPQUFPLEVBQUUsVUFBVTtrQkFDbkI1WixJQUFJLEVBQUUsU0FBUztrQkFDZjZaLE1BQU0sRUFBRTtnQkFDVCxDQUFDO2NBRUg7WUFDRCxDQUFDO1lBQ0QsUUFBUSxFQUFFelgsT0FBTyxFQUFFMFgsa0JBQWtCLElBQUksQ0FBQztVQUMzQztRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBQ0Z4ZixJQUFJLENBQUMwUyxLQUFLLENBQUMrTSw4QkFBOEIsQ0FBQ3hDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDaFksZUFBZSxDQUFDeWEsOEJBQThCLENBQUM7SUFDdkgsTUFBTUMsZ0JBQWdCLEdBQUksTUFBTTdNLFNBQVMsQ0FBQzdELE1BQU0sQ0FBQztNQUFFdkosSUFBSSxFQUFFLGVBQWUwWCxJQUFJLEVBQUU7TUFBRXhMLEVBQUUsRUFBRUE7SUFBRyxDQUFDLENBQWtCO0lBRTFHLE1BQU0rTixnQkFBZ0IsQ0FBQ0MsV0FBVztJQUNsQyxNQUFNQyxDQUFDLEdBQUcsTUFBT0YsZ0JBQWdCLENBQUNHLFNBQVMsQ0FBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBeUJDLElBQUksR0FBRyxDQUFDO0lBQ25HLE9BQU87TUFBRXhiLFlBQVksRUFBRW1iLGdCQUFnQjtNQUFFTSxpQkFBaUIsRUFBRUosQ0FBQyxDQUFDSztJQUFPLENBQUM7RUFDdkU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE5WSxRQUFBLENBQUEwVixzQkFBQSxHQUFBQSxzQkFBQTtFQU1PLFNBQVNxRCxXQUFXQSxDQUFDQyxVQUEwQixFQUFFbmQsUUFBMkMsRUFBMkI7SUFDN0gsS0FBSyxJQUFJbVQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHZ0ssVUFBVSxDQUFDNVosTUFBTSxFQUFFNFAsQ0FBQyxFQUFFLEVBQUU7TUFDM0MsTUFBTWlLLE9BQU8sR0FBR0QsVUFBVSxDQUFDRSxJQUFJLENBQUNsSyxDQUFDLENBQWdCO01BQ2pELElBQUluVCxRQUFRLENBQUNvZCxPQUFPLENBQUMsRUFBRTtRQUN0QixPQUFPQSxPQUFPO01BQ2Y7SUFDRDtJQUNBLE9BQU92YixTQUFTO0VBQ2pCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBc0MsUUFBQSxDQUFBK1ksV0FBQSxHQUFBQSxXQUFBO0VBTU8sZUFBZUksWUFBWUEsQ0FBZTVmLE9BQXNCLEVBQUU2ZixTQUFpQixFQUF3QjtJQUNqSCxPQUFPLElBQUk1TixPQUFPLENBQUUzSCxPQUFPLElBQUs7TUFDL0J0SyxPQUFPLENBQUM4ZixlQUFlLENBQUNELFNBQVMsRUFBR0UsS0FBWSxJQUFLO1FBQ3BEelYsT0FBTyxDQUFDeVYsS0FBK0IsQ0FBQztNQUN6QyxDQUFDLENBQUM7SUFDSCxDQUFDLENBQUM7RUFDSDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtFQUhBdFosUUFBQSxDQUFBbVosWUFBQSxHQUFBQSxZQUFBO0VBSU8sU0FBU0ksd0JBQXdCQSxDQUFDQyxPQUFnQixFQUFRO0lBQ2hFQyxhQUFhLENBQUNDLG1CQUFtQixHQUFHRixPQUFPO0VBQzVDO0VBQUN4WixRQUFBLENBQUF1Wix3QkFBQSxHQUFBQSx3QkFBQTtFQUVNLGVBQWVJLFFBQVFBLENBQUNDLEtBQWEsRUFBaUI7SUFDNUQsT0FBTyxJQUFJcE8sT0FBTyxDQUFRM0gsT0FBTyxJQUFLO01BQ3JDaEwsVUFBVSxDQUFDZ0wsT0FBTyxFQUFFK1YsS0FBSyxDQUFDO0lBQzNCLENBQUMsQ0FBQztFQUNIO0VBQUM1WixRQUFBLENBQUEyWixRQUFBLEdBQUFBLFFBQUE7RUFBQSxPQUFBM1osUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -20,6 +20,7 @@ import { convertTypes, getInvolvedDataModelObjects } from "sap/fe/core/converter
|
|
|
20
20
|
import type { IDiagnostics, PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
|
|
21
21
|
import type { IssueCategory, IssueSeverity } from "sap/fe/core/converters/helpers/IssueManager";
|
|
22
22
|
import ValueFormatter from "sap/fe/core/formatters/ValueFormatter";
|
|
23
|
+
import { DefaultEnvironmentCapabilities, EnvironmentCapabilitiesService } from "sap/fe/core/services/EnvironmentServiceFactory";
|
|
23
24
|
import type { SideEffectsService } from "sap/fe/core/services/SideEffectsServiceFactory";
|
|
24
25
|
import SideEffectsFactory from "sap/fe/core/services/SideEffectsServiceFactory";
|
|
25
26
|
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
@@ -158,6 +159,9 @@ async function _buildPreProcessorSettings(
|
|
|
158
159
|
),
|
|
159
160
|
bindingContexts: {},
|
|
160
161
|
appComponent: {
|
|
162
|
+
getRoutingService: () => ({
|
|
163
|
+
_getTargetInformation: jest.fn()
|
|
164
|
+
}),
|
|
161
165
|
getSideEffectsService: jest.fn(),
|
|
162
166
|
getDiagnostics: () => undefined,
|
|
163
167
|
getShellServices: jest.fn(),
|
|
@@ -620,7 +624,7 @@ const applyFlexChanges = async function (flexChanges: { [x: string]: object[] },
|
|
|
620
624
|
|
|
621
625
|
//Assert that all changes have been applied
|
|
622
626
|
const changesApplied = getChangesFromXML(resultXML);
|
|
623
|
-
expect(changesApplied.length).toBe(flexChanges?.changes?.length ??
|
|
627
|
+
expect(changesApplied.length).toBe(flexChanges?.changes?.length ?? flexChanges?.variantDependentControlChanges?.length ?? 0);
|
|
624
628
|
return resultXML;
|
|
625
629
|
};
|
|
626
630
|
|
|
@@ -780,8 +784,8 @@ function getTab(tabCount: number, toAdd = 0) {
|
|
|
780
784
|
* @returns The string with dynamic IDs replaced.
|
|
781
785
|
*/
|
|
782
786
|
function removeDynamicId(id: string): string {
|
|
783
|
-
const UID = /uid--id-\d{13}-\d{1,
|
|
784
|
-
const CONTROLID = /id-\d{13}-\d{1,
|
|
787
|
+
const UID = /uid--id-\d{13}-\d{1,4}/;
|
|
788
|
+
const CONTROLID = /id-\d{13}-\d{1,4}/;
|
|
785
789
|
return id.replace(UID, "uid--id").replace(CONTROLID, "id");
|
|
786
790
|
}
|
|
787
791
|
|
|
@@ -849,16 +853,20 @@ function getBindingInfo(
|
|
|
849
853
|
* @param control.mBindingInfos The binding information of the control.
|
|
850
854
|
* @param tabCount The current tab level for indentation.
|
|
851
855
|
* @param options Optional settings for serialization.
|
|
856
|
+
* @param options.inheritedProperties If set to true, inherited properties are included in the serialization.
|
|
852
857
|
* @param options.keepDynamicIds If set to true, dynamic IDs are not replaced with a constant value.
|
|
853
858
|
* @param options.ignoreKeys List of property keys to ignore during serialization.
|
|
859
|
+
* @param options.ignoreBindingInfoKeys List of binding info keys to ignore during serialization.
|
|
854
860
|
* @returns A string representation of the control's properties.
|
|
855
861
|
*/
|
|
856
862
|
function serializeProperties(
|
|
857
863
|
control: Control,
|
|
858
864
|
tabCount: number,
|
|
859
865
|
options?: {
|
|
866
|
+
inheritedProperties?: boolean;
|
|
860
867
|
keepDynamicIds?: boolean;
|
|
861
868
|
ignoreKeys?: string[];
|
|
869
|
+
ignoreBindingInfoKeys?: string[];
|
|
862
870
|
}
|
|
863
871
|
): string {
|
|
864
872
|
let data = "";
|
|
@@ -867,10 +875,10 @@ function serializeProperties(
|
|
|
867
875
|
const properties = Object.keys(control.getMetadata().getAllProperties()).filter((propertyKey) => !ignoreKeys.includes(propertyKey));
|
|
868
876
|
properties.sort();
|
|
869
877
|
for (const propertyKey of properties) {
|
|
870
|
-
if (!control.isPropertyInitial(propertyKey)) {
|
|
878
|
+
if (options?.inheritedProperties === true || !control.isPropertyInitial(propertyKey)) {
|
|
871
879
|
const propertyValue = getProperty(control, propertyKey, { keepDynamicIds });
|
|
872
880
|
data += `,\n${getTab(tabCount)} ${propertyKey}: ${propertyValue}`;
|
|
873
|
-
if (control.isBound(propertyKey)) {
|
|
881
|
+
if (control.isBound(propertyKey) && !(options?.ignoreBindingInfoKeys ?? []).includes(propertyKey)) {
|
|
874
882
|
data += `,\n${getTab(tabCount)} ${propertyKey}__BindingInfo: ${getBindingInfo(control, propertyKey, { keepDynamicIds })}`;
|
|
875
883
|
}
|
|
876
884
|
}
|
|
@@ -956,17 +964,21 @@ function serializeEvents(
|
|
|
956
964
|
* Serializes a UI5 control or an array of UI5 controls into a string representation.
|
|
957
965
|
* @param controlToSerialize The control or array of controls to serialize.
|
|
958
966
|
* @param options Optional settings for serialization.
|
|
967
|
+
* @param options.inheritedProperties If set to true, inherited properties will be included in the serialization.
|
|
959
968
|
* @param options.showCustomStyleClasses If set to true, custom style classes will be included in the serialization.
|
|
960
969
|
* @param options.keepDynamicIds If set to true, dynamic IDs are not replaced with a constant value.
|
|
961
970
|
* @param options.ignoreKeys List of property, association, and event keys to ignore during serialization.
|
|
971
|
+
* @param options.ignoreBindingInfoKeys List of binding info keys to ignore during serialization.
|
|
962
972
|
* @returns A string representation of the control or array of controls.
|
|
963
973
|
*/
|
|
964
974
|
export function serializeControl(
|
|
965
975
|
controlToSerialize?: UI5Element | UI5Element[],
|
|
966
976
|
options?: {
|
|
977
|
+
inheritedProperties?: boolean;
|
|
967
978
|
showCustomStyleClasses?: boolean;
|
|
968
979
|
keepDynamicIds?: boolean;
|
|
969
980
|
ignoreKeys?: string[];
|
|
981
|
+
ignoreBindingInfoKeys?: string[];
|
|
970
982
|
}
|
|
971
983
|
): string | string[] {
|
|
972
984
|
let tabCount = 0;
|
|
@@ -974,6 +986,14 @@ export function serializeControl(
|
|
|
974
986
|
const keepDynamicIds = options?.keepDynamicIds === true;
|
|
975
987
|
const serializeDelegate = {
|
|
976
988
|
start: function (control: any, sAggregationName: string) {
|
|
989
|
+
const customData = control.getCustomData?.();
|
|
990
|
+
if (Array.isArray(customData) && customData.length > 1) {
|
|
991
|
+
customData.sort((a, b) => a.getKey().localeCompare(b.getKey()));
|
|
992
|
+
control.removeAllCustomData();
|
|
993
|
+
for (const cd of customData) {
|
|
994
|
+
control.addCustomData(cd);
|
|
995
|
+
}
|
|
996
|
+
}
|
|
977
997
|
let controlDetail = "";
|
|
978
998
|
if (sAggregationName) {
|
|
979
999
|
if (control.getParent()) {
|
|
@@ -1345,6 +1365,7 @@ export async function initializeAppComponent(
|
|
|
1345
1365
|
}
|
|
1346
1366
|
});
|
|
1347
1367
|
});
|
|
1368
|
+
jest.spyOn(EnvironmentCapabilitiesService.prototype, "getCapabilities").mockReturnValue(DefaultEnvironmentCapabilities);
|
|
1348
1369
|
const mockAppComponent = (await Component.create({ name: `sap.fe.test.${guid}`, id: id })) as AppComponent;
|
|
1349
1370
|
|
|
1350
1371
|
await mockAppComponent.initialized;
|
|
@@ -29,46 +29,6 @@ sap.ui.define(
|
|
|
29
29
|
)
|
|
30
30
|
);
|
|
31
31
|
},
|
|
32
|
-
|
|
33
|
-
iResetTestData: function (bIgnoreRedeploy) {
|
|
34
|
-
var that = this,
|
|
35
|
-
oUriParams = new URLSearchParams(window.location.search),
|
|
36
|
-
sBackendUrl = oUriParams.get("useBackendUrl"),
|
|
37
|
-
sProxyPrefix = sBackendUrl ? "/databinding/proxy/" + sBackendUrl.replace("://", "/") : "",
|
|
38
|
-
bSuccess = false;
|
|
39
|
-
var sTenantID = "";
|
|
40
|
-
if (window.__karma__ && window.__karma__.config && window.__karma__.config.ui5) {
|
|
41
|
-
sTenantID = window.__karma__.config.ui5.shardIndex;
|
|
42
|
-
} else {
|
|
43
|
-
sTenantID = window.location.href.includes("sap-client")
|
|
44
|
-
? new URL(window.location.href).searchParams.get("sap-client")
|
|
45
|
-
: "default";
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return OpaBuilder.create(this)
|
|
49
|
-
.success(function () {
|
|
50
|
-
var oResetData = that.resetTestData(),
|
|
51
|
-
oRedeploy = bIgnoreRedeploy ? Promise.resolve() : jQuery.post(sProxyPrefix + "/redeploy?tenant=" + sTenantID);
|
|
52
|
-
|
|
53
|
-
Promise.all([oResetData, oRedeploy])
|
|
54
|
-
.finally(function () {
|
|
55
|
-
bSuccess = true;
|
|
56
|
-
})
|
|
57
|
-
.catch(function (oError) {
|
|
58
|
-
throw oError;
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
return OpaBuilder.create(this)
|
|
62
|
-
.timeout(60) // allow some time (redeployment on the Java stack is slow)
|
|
63
|
-
.check(function () {
|
|
64
|
-
return bSuccess;
|
|
65
|
-
})
|
|
66
|
-
.execute();
|
|
67
|
-
})
|
|
68
|
-
.description(Utils.formatMessage("Reset test data on tenant '{0}'", sTenantID))
|
|
69
|
-
.execute();
|
|
70
|
-
},
|
|
71
|
-
|
|
72
32
|
/**
|
|
73
33
|
* Fail the test if there are errors logged to the browser console.
|
|
74
34
|
* @param {Array<RegExp|string>} [aErrors] The allowed error messages. Either use regular expressions or strings. Pass undefined or an empty array to reject all error messages.
|
|
@@ -22,7 +22,7 @@ sap.ui.define(["sap/ui/core/Lib", "sap/ui/core/library"], function (Library, _li
|
|
|
22
22
|
controls: [],
|
|
23
23
|
elements: [],
|
|
24
24
|
// eslint-disable-next-line no-template-curly-in-string
|
|
25
|
-
version: "1.
|
|
25
|
+
version: "1.143.0",
|
|
26
26
|
noLibraryCSS: true
|
|
27
27
|
});
|
|
28
28
|
return thisLib;
|