@garrix82/reactgenie-lib 1.3.2 → 1.3.4

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.
@@ -16,13 +16,14 @@ declare class GenieInterfacesStore {
16
16
  [key: string]: GenieInterfaceStoreElement[];
17
17
  };
18
18
  addInterface(element: GenieInterfaceStoreElement): void;
19
- getObjectClassName(object: GenieObject): string;
20
- getInterfaces(object: GenieObject): GenieInterfaceStoreElement;
19
+ getObjectClassName(object: GenieObject): string | null;
20
+ getInterfaces(object: GenieObject): GenieInterfaceStoreElement | null;
21
21
  allInterfaces(): {
22
22
  [key: string]: GenieInterfaceStoreElement;
23
23
  };
24
24
  }
25
25
  export declare const AllGenieObjectInterfaces: GenieInterfacesStore;
26
+ export declare function getStableGenieObjectClassName(object: any): string | null;
26
27
  export declare const AllGenieDisplayedInstances: {
27
28
  [key: string]: () => GenieInterfaceSpec;
28
29
  };
@@ -82,6 +82,7 @@ Object.defineProperty(exports, "float", {
82
82
  return _reactgenieDsl.float;
83
83
  }
84
84
  });
85
+ exports.getStableGenieObjectClassName = getStableGenieObjectClassName;
85
86
  exports.hasSameFunctionSignature = hasSameFunctionSignature;
86
87
  exports.initReactGenie = initReactGenie;
87
88
  Object.defineProperty(exports, "int", {
@@ -117,14 +118,11 @@ class GenieInterfacesStore {
117
118
  this.supportedTypes.add(element.objectClassName);
118
119
  }
119
120
  getObjectClassName(object) {
120
- if (object.constructor.name === "Array") {
121
- return this.getObjectClassName(object[0]) + "[]";
122
- }
123
- return object.constructor.name;
121
+ return getStableGenieObjectClassName(object);
124
122
  }
125
123
  getInterfaces(object) {
126
124
  const className = this.getObjectClassName(object);
127
- if (this.interfaces[className]) {
125
+ if (className && this.interfaces[className]) {
128
126
  const sortedInterfaces = this.interfaces[className].sort((a, b) => {
129
127
  return b.displayPriority(object) - a.displayPriority(object);
130
128
  });
@@ -145,6 +143,28 @@ class GenieInterfacesStore {
145
143
  }
146
144
  }
147
145
  const AllGenieObjectInterfaces = exports.AllGenieObjectInterfaces = new GenieInterfacesStore();
146
+ function getStableGenieObjectClassName(object) {
147
+ if (Array.isArray(object)) {
148
+ const itemClassName = getStableGenieObjectClassName(object[0]);
149
+ return itemClassName ? `${itemClassName}[]` : null;
150
+ }
151
+ if (!object || typeof object !== "object" && typeof object !== "function") {
152
+ return null;
153
+ }
154
+ const descriptorClassName = object?.constructor?.ClassDescriptor?.className ?? object?.ClassDescriptor?.className;
155
+ if (typeof descriptorClassName === "string" && descriptorClassName.length > 0) {
156
+ return descriptorClassName;
157
+ }
158
+ const serializedClassName = object?.__genieObjectClass;
159
+ if (typeof serializedClassName === "string" && serializedClassName.length > 0) {
160
+ return serializedClassName;
161
+ }
162
+ const constructorName = object?.constructor?.name;
163
+ if (typeof constructorName === "string" && constructorName.length > 0) {
164
+ return constructorName;
165
+ }
166
+ return null;
167
+ }
148
168
  const AllGenieDisplayedInstances = exports.AllGenieDisplayedInstances = {};
149
169
  const AllGenieDisplayedInstanceRefreshers = exports.AllGenieDisplayedInstanceRefreshers = {};
150
170
  const ClickPoints = exports.ClickPoints = [];
@@ -365,4 +385,4 @@ function GenieClassInterface(type, displayTitle = undefined, displayPriority = 0
365
385
  return /*#__PURE__*/_react.default.memo(newTarget);
366
386
  };
367
387
  }
368
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2VuaWVWaWV3V3JhcHBlciIsInJlcXVpcmUiLCJfcmVhY3ROYXRpdmUiLCJfcmVhY3RnZW5pZURzbCIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY3VycmVudFNlbGVjdGlvbiIsIl9uYXRpdmVWaXNpYmlsaXR5IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIkdlbmllSW50ZXJmYWNlc1N0b3JlIiwiY29uc3RydWN0b3IiLCJzdXBwb3J0ZWRUeXBlcyIsIlNldCIsImludGVyZmFjZXMiLCJhZGRJbnRlcmZhY2UiLCJlbGVtZW50Iiwib2JqZWN0Q2xhc3NOYW1lIiwiYWRkIiwiZ2V0T2JqZWN0Q2xhc3NOYW1lIiwib2JqZWN0IiwibmFtZSIsImdldEludGVyZmFjZXMiLCJjbGFzc05hbWUiLCJzb3J0ZWRJbnRlcmZhY2VzIiwic29ydCIsImEiLCJiIiwiZGlzcGxheVByaW9yaXR5IiwiYWxsSW50ZXJmYWNlcyIsImtleSIsInZpZXdDbGFzc05hbWUiLCJBbGxHZW5pZU9iamVjdEludGVyZmFjZXMiLCJleHBvcnRzIiwiQWxsR2VuaWVEaXNwbGF5ZWRJbnN0YW5jZXMiLCJBbGxHZW5pZURpc3BsYXllZEluc3RhbmNlUmVmcmVzaGVycyIsIkNsaWNrUG9pbnRzIiwiQ3VycmVudFNlbGVjdGlvbkJsb2NrZWRSZWN0cyIsInRvU3RyaW5nT3JFbXB0eSIsImV4YW1wbGVLZXkiLCJleGFtcGxlIiwidXNlcl91dHRlcmFuY2UiLCJleGFtcGxlX3BhcnNlZCIsIm5vcm1hbGl6ZVBhcmFtcyIsInBhcmFtcyIsIkFycmF5IiwiaXNBcnJheSIsImhhc1NhbWVGdW5jdGlvblNpZ25hdHVyZSIsImxlZnQiLCJyaWdodCIsImZ1bmNfbmFtZSIsImlzU3RhdGljIiwicmV0dXJuVHlwZSIsImxlZnRQYXJhbXMiLCJwYXJhbWV0ZXJzIiwicmlnaHRQYXJhbXMiLCJ0eXBlIiwicmVxdWlyZWQiLCJ1cHNlcnRGdW5jdGlvbkRlc2NyaXB0b3IiLCJmdW5jdGlvbnMiLCJjYW5kaWRhdGUiLCJleGlzdGluZyIsIm1lcmdlVW5pcXVlRXhhbXBsZXMiLCJpbmNvbWluZyIsIm1lcmdlZCIsInNlZW4iLCJtYXAiLCJoYXMiLCJJbnN0YW50aWF0ZUdlbmllT2JqZWN0Iiwib2JqZWN0U3BlYyIsIm9iamVjdEtleSIsImhhc093biIsIm9iamVjdENsYXNzIiwiQWxsR2VuaWVPYmplY3RzIiwiR2V0T2JqZWN0IiwiUmV0cmlldmVJbnRlcmZhY2VzIiwiUmV0cmlldmVJbnRlcmZhY2VzU25hcHNob3QiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImRpc3BsYXllZEluc3RhbmNlcyIsInJlc29sdXRpb24iLCJyZXNvbHZlVmlzaWJsZUludGVyZmFjZXNGb3JQbGF0Zm9ybSIsIlBsYXRmb3JtIiwiT1MiLCJ2aXNpYmlsaXR5U3RhdGUiLCJzdGF0ZSIsIlJlZnJlc2hEaXNwbGF5ZWRJbnN0YW5jZVJlY3RzIiwicmVhY3RHZW5pZUNsYXNzTW9kaWZpZXIiLCJ0YXJnZXQiLCJDdXJyZW50IiwiY3VycmVudENsYXNzTmFtZSIsIkNsYXNzRGVzY3JpcHRvciIsImludGVyZmFjZVNuYXBzaG90IiwiZ2VuaWVJbnRlcmZhY2VzIiwiQ3VycmVudENvbnRleHRFcnJvciIsImN1cnJlbnRJbnRlcmZhY2UiLCJwaWNrQ3VycmVudEludGVyZmFjZSIsImJsb2NrZWRSZWN0cyIsIkZ1bmNEZXNjcmlwdG9yIiwiQWxsQ3VycmVudCIsImNhbmRpZGF0ZXMiLCJnZW5pZUludGVyZmFjZSIsIm9iamVjdHMiLCJjbGlja1BvaW50IiwiY2xvc2VzdCIsInBpY2tOZWFyZXN0SW50ZXJmYWNlIiwiZ2VuaWVEaXNwYXRjaCIsIm5ld0V4YW1wbGVzIiwic2hhcmVkU3RhdGUiLCJFeGFtcGxlcyIsInNldFNoYXJlZFN0YXRlIiwiaW5pdFJlYWN0R2VuaWUiLCJyZWFjdEdlbmllU3RvcmUiLCJpbml0R2VuaWUiLCJpbml0R2VuaWVDbGFzc01vZGlmaWVyIiwicmVhY3RHZW5pZVN0YXRlIiwibmF2U3RhdGUiLCJvYmplY3RWaWV3Q2xhc3NOYW1lIiwib2JqZWN0Q29uc3RydWN0b3JQYXJhbXMiLCJxdWVyeUludGVudCIsInJlc3VsdFJlZiIsInJlc3VsdE9iamVjdFR5cGUiLCJuYXZTdGFjayIsIm1lc3NhZ2UiLCJtaW5pbWFsVGV4dCIsImZ1bGxUZXh0Iiwic2hvdWxkU3BlYWsiLCJvcmlnaW4iLCJyZXN1bHRXaW5kb3dCeVJlZiIsInJlc3VsdFdpbmRvd09yZGVyIiwicmVzdWx0V2luZG93TWF4IiwicmVzdWx0V2luZG93VHRsTXMiLCJyZXN1bHRXaW5kb3dTZXF1ZW5jZSIsIkdlbmllQ2xhc3NJbnRlcmZhY2UiLCJkaXNwbGF5VGl0bGUiLCJ1bmRlZmluZWQiLCJuZXdUYXJnZXQiLCJhcmdzIiwiR2VuaWVWaWV3V3JhcHBlciIsInRpdGxlRnVuY3Rpb24iLCJkaXNwbGF5UHJpb3JpdHlGdW5jdGlvbiIsIm5ld0dlbmllSW50ZXJmYWNlU3BlYyIsInRpdGxlIiwiZnVuY3Rpb24iLCJSZWFjdCIsIm1lbW8iXSwic291cmNlcyI6WyIuLi9zcmMvcmVhY3QtZGVjb3JhdG9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBkaWN0aW9uYXJ5IG9mIGdlbmllIG9iamVjdCBuYW1lcyB0byBnZW5pZSBvYmplY3RzXG5pbXBvcnQgeyBHZW5pZVZpZXdXcmFwcGVyIH0gZnJvbSBcIi4vZ2VuaWUtdmlldy13cmFwcGVyXCI7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gXCJyZWFjdC1uYXRpdmVcIjtcbmltcG9ydCB7XG4gIEZ1bmNEZXNjcmlwdG9yLFxuICBHZW5pZUNsYXNzTW9kaWZpZXIsXG4gIEdlbmllT2JqZWN0LFxuICBpbml0R2VuaWUsXG4gIGdlbmllRGlzcGF0Y2gsXG4gIEFsbEdlbmllT2JqZWN0cyxcbiAgc2hhcmVkU3RhdGUsXG4gIHNoYXJlZFN0b3JlLFxuICBzZXRTaGFyZWRTdGF0ZSxcbn0gZnJvbSBcIkBnYXJyaXg4Mi9yZWFjdGdlbmllLWRzbFwiO1xuaW1wb3J0IHtcbiAgR2VuaWVDbGFzcyxcbiAgR2VuaWVGdW5jdGlvbixcbiAgR2VuaWVLZXksXG4gIEdlbmllUHJvcGVydHksXG4gIERhdGFDbGFzcyxcbiAgSGVscGVyQ2xhc3MsXG4gIGludCxcbiAgZmxvYXQsXG4gIENsYXNzRGVzY3JpcHRvcixcbiAgRmllbGREZXNjcmlwdG9yLFxuICBQYXJhbURlc2NyaXB0b3IsXG59IGZyb20gXCJAZ2Fycml4ODIvcmVhY3RnZW5pZS1kc2xcIjtcblxuZXhwb3J0IHtcbiAgR2VuaWVDbGFzcyxcbiAgR2VuaWVGdW5jdGlvbixcbiAgR2VuaWVLZXksXG4gIEdlbmllUHJvcGVydHksXG4gIERhdGFDbGFzcyxcbiAgSGVscGVyQ2xhc3MsXG4gIGludCxcbiAgZmxvYXQsXG4gIENsYXNzRGVzY3JpcHRvcixcbiAgRmllbGREZXNjcmlwdG9yLFxuICBGdW5jRGVzY3JpcHRvcixcbiAgUGFyYW1EZXNjcmlwdG9yLFxufSBmcm9tIFwiQGdhcnJpeDgyL3JlYWN0Z2VuaWUtZHNsXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEdlbmllU3RhdGUgfSBmcm9tIFwiLi9zaGFyZWQtc3RvcmVcIjtcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHtcbiAgQ3VycmVudENvbnRleHRFcnJvcixcbiAgcGlja0N1cnJlbnRJbnRlcmZhY2UsXG4gIHBpY2tOZWFyZXN0SW50ZXJmYWNlLFxufSBmcm9tIFwiLi9jdXJyZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHtcbiAgdHlwZSBOYXRpdmVWaXNpYmlsaXR5U3RhdGUsXG4gIHJlc29sdmVWaXNpYmxlSW50ZXJmYWNlc0ZvclBsYXRmb3JtLFxufSBmcm9tIFwiLi9uYXRpdmUtdmlzaWJpbGl0eVwiO1xuXG5leHBvcnQgeyBBbGxHZW5pZU9iamVjdHMgfSBmcm9tIFwiQGdhcnJpeDgyL3JlYWN0Z2VuaWUtZHNsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuaWVJbnRlcmZhY2VTdG9yZUVsZW1lbnQge1xuICBvYmplY3RDbGFzc05hbWU6IHN0cmluZztcbiAgdmlld0NsYXNzTmFtZTogc3RyaW5nO1xuICB0aXRsZTogKGFueSkgPT4gc3RyaW5nO1xuICBmdW5jdGlvbjogYW55O1xuICBkaXNwbGF5UHJpb3JpdHk6ICh0YXJnZXQ6IGFueSkgPT4gbnVtYmVyO1xufVxuXG5jbGFzcyBHZW5pZUludGVyZmFjZXNTdG9yZSB7XG4gIHN1cHBvcnRlZFR5cGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBpbnRlcmZhY2VzOiB7IFtrZXk6IHN0cmluZ106IEdlbmllSW50ZXJmYWNlU3RvcmVFbGVtZW50W10gfSA9IHt9O1xuXG4gIGFkZEludGVyZmFjZShlbGVtZW50OiBHZW5pZUludGVyZmFjZVN0b3JlRWxlbWVudCkge1xuICAgIGlmICghdGhpcy5pbnRlcmZhY2VzW2VsZW1lbnQub2JqZWN0Q2xhc3NOYW1lXSkge1xuICAgICAgdGhpcy5pbnRlcmZhY2VzW2VsZW1lbnQub2JqZWN0Q2xhc3NOYW1lXSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmludGVyZmFjZXNbZWxlbWVudC5vYmplY3RDbGFzc05hbWVdLnB1c2goZWxlbWVudCk7XG4gICAgdGhpcy5zdXBwb3J0ZWRUeXBlcy5hZGQoZWxlbWVudC5vYmplY3RDbGFzc05hbWUpO1xuICB9XG5cbiAgZ2V0T2JqZWN0Q2xhc3NOYW1lKG9iamVjdDogR2VuaWVPYmplY3QpOiBzdHJpbmcge1xuICAgIGlmIChvYmplY3QuY29uc3RydWN0b3IubmFtZSA9PT0gXCJBcnJheVwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RDbGFzc05hbWUob2JqZWN0WzBdKSArIFwiW11cIjtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdC5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgZ2V0SW50ZXJmYWNlcyhvYmplY3Q6IEdlbmllT2JqZWN0KTogR2VuaWVJbnRlcmZhY2VTdG9yZUVsZW1lbnQge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuZ2V0T2JqZWN0Q2xhc3NOYW1lKG9iamVjdCk7XG4gICAgaWYgKHRoaXMuaW50ZXJmYWNlc1tjbGFzc05hbWVdKSB7XG4gICAgICBjb25zdCBzb3J0ZWRJbnRlcmZhY2VzID0gdGhpcy5pbnRlcmZhY2VzW2NsYXNzTmFtZV0uc29ydCgoYSwgYikgPT4ge1xuICAgICAgICByZXR1cm4gYi5kaXNwbGF5UHJpb3JpdHkob2JqZWN0KSAtIGEuZGlzcGxheVByaW9yaXR5KG9iamVjdCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzb3J0ZWRJbnRlcmZhY2VzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGtleSBpcyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgR2VuaWVJbnRlcmZhY2VTdG9yZUVsZW1lbnQsIG5vdCB0aGUgR2VuaWVPYmplY3RcbiAgYWxsSW50ZXJmYWNlcygpOiB7IFtrZXk6IHN0cmluZ106IEdlbmllSW50ZXJmYWNlU3RvcmVFbGVtZW50IH0ge1xuICAgIGNvbnN0IGFsbEludGVyZmFjZXM6IHsgW2tleTogc3RyaW5nXTogR2VuaWVJbnRlcmZhY2VTdG9yZUVsZW1lbnQgfSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaW50ZXJmYWNlcykge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuaW50ZXJmYWNlc1trZXldKSB7XG4gICAgICAgIGFsbEludGVyZmFjZXNbZWxlbWVudC52aWV3Q2xhc3NOYW1lXSA9IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbGxJbnRlcmZhY2VzO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBBbGxHZW5pZU9iamVjdEludGVyZmFjZXM6IEdlbmllSW50ZXJmYWNlc1N0b3JlID1cbiAgbmV3IEdlbmllSW50ZXJmYWNlc1N0b3JlKCk7XG5cbmV4cG9ydCBjb25zdCBBbGxHZW5pZURpc3BsYXllZEluc3RhbmNlczoge1xuICBba2V5OiBzdHJpbmddOiAoKSA9PiBHZW5pZUludGVyZmFjZVNwZWM7XG59ID0ge307XG5cbmV4cG9ydCBjb25zdCBBbGxHZW5pZURpc3BsYXllZEluc3RhbmNlUmVmcmVzaGVyczoge1xuICBba2V5OiBzdHJpbmddOiAoKSA9PiB2b2lkO1xufSA9IHt9O1xuXG5leHBvcnQgY29uc3QgQ2xpY2tQb2ludHM6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfVtdID0gW107XG5leHBvcnQgY29uc3QgQ3VycmVudFNlbGVjdGlvbkJsb2NrZWRSZWN0czogQXJyYXk8e1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59PiA9IFtdO1xuXG5leHBvcnQgdHlwZSBFeGFtcGxlTGlrZSA9IHtcbiAgdXNlcl91dHRlcmFuY2U/OiB1bmtub3duO1xuICBleGFtcGxlX3BhcnNlZD86IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBGdW5jUGFyYW1MaWtlID0ge1xuICBuYW1lPzogdW5rbm93bjtcbiAgdHlwZT86IHVua25vd247XG4gIHJlcXVpcmVkPzogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIEZ1bmNEZXNjcmlwdG9yTGlrZSA9IHtcbiAgZnVuY19uYW1lPzogdW5rbm93bjtcbiAgaXNTdGF0aWM/OiB1bmtub3duO1xuICByZXR1cm5UeXBlPzogdW5rbm93bjtcbiAgcGFyYW1ldGVycz86IHVua25vd247XG59O1xuXG5mdW5jdGlvbiB0b1N0cmluZ09yRW1wdHkodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiBcIlwiO1xufVxuXG5mdW5jdGlvbiBleGFtcGxlS2V5KGV4YW1wbGU6IEV4YW1wbGVMaWtlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3RvU3RyaW5nT3JFbXB0eShleGFtcGxlPy51c2VyX3V0dGVyYW5jZSl9XFxuJHt0b1N0cmluZ09yRW1wdHkoXG4gICAgZXhhbXBsZT8uZXhhbXBsZV9wYXJzZWQsXG4gICl9YDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1zKHBhcmFtczogdW5rbm93bik6IEZ1bmNQYXJhbUxpa2VbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtcykgPyAocGFyYW1zIGFzIEZ1bmNQYXJhbUxpa2VbXSkgOiBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1NhbWVGdW5jdGlvblNpZ25hdHVyZShcbiAgbGVmdDogRnVuY0Rlc2NyaXB0b3JMaWtlLFxuICByaWdodDogRnVuY0Rlc2NyaXB0b3JMaWtlLFxuKTogYm9vbGVhbiB7XG4gIGlmIChsZWZ0Py5mdW5jX25hbWUgIT09IHJpZ2h0Py5mdW5jX25hbWUpIHJldHVybiBmYWxzZTtcbiAgaWYgKGxlZnQ/LmlzU3RhdGljICE9PSByaWdodD8uaXNTdGF0aWMpIHJldHVybiBmYWxzZTtcbiAgaWYgKGxlZnQ/LnJldHVyblR5cGUgIT09IHJpZ2h0Py5yZXR1cm5UeXBlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgbGVmdFBhcmFtcyA9IG5vcm1hbGl6ZVBhcmFtcyhsZWZ0Py5wYXJhbWV0ZXJzKTtcbiAgY29uc3QgcmlnaHRQYXJhbXMgPSBub3JtYWxpemVQYXJhbXMocmlnaHQ/LnBhcmFtZXRlcnMpO1xuXG4gIGlmIChsZWZ0UGFyYW1zLmxlbmd0aCAhPT0gcmlnaHRQYXJhbXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZWZ0UGFyYW1zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgYSA9IGxlZnRQYXJhbXNbaV07XG4gICAgY29uc3QgYiA9IHJpZ2h0UGFyYW1zW2ldO1xuICAgIGlmIChhPy5uYW1lICE9PSBiPy5uYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGE/LnR5cGUgIT09IGI/LnR5cGUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoYT8ucmVxdWlyZWQgIT09IGI/LnJlcXVpcmVkKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwc2VydEZ1bmN0aW9uRGVzY3JpcHRvcihcbiAgZnVuY3Rpb25zOiBTZXQ8RnVuY0Rlc2NyaXB0b3JMaWtlPixcbiAgY2FuZGlkYXRlOiBGdW5jRGVzY3JpcHRvckxpa2UsXG4pOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBleGlzdGluZyBvZiBmdW5jdGlvbnMpIHtcbiAgICBpZiAoaGFzU2FtZUZ1bmN0aW9uU2lnbmF0dXJlKGV4aXN0aW5nLCBjYW5kaWRhdGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9ucy5hZGQoY2FuZGlkYXRlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVVuaXF1ZUV4YW1wbGVzPFQgZXh0ZW5kcyBFeGFtcGxlTGlrZT4oXG4gIGV4aXN0aW5nOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBpbmNvbWluZzogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IFRbXSB7XG4gIGNvbnN0IG1lcmdlZCA9IFsuLi4oZXhpc3RpbmcgfHwgW10pXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQobWVyZ2VkLm1hcCgoZXhhbXBsZSkgPT4gZXhhbXBsZUtleShleGFtcGxlKSkpO1xuXG4gIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGluY29taW5nIHx8IFtdKSB7XG4gICAgY29uc3Qga2V5ID0gZXhhbXBsZUtleShjYW5kaWRhdGUpO1xuICAgIGlmIChzZWVuLmhhcyhrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgc2Vlbi5hZGQoa2V5KTtcbiAgICBtZXJnZWQucHVzaChjYW5kaWRhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuaW50ZXJmYWNlIEdlbmllT2JqZWN0U3BlYyB7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBrZXk6IGFueTtcbn1cblxuaW50ZXJmYWNlIEdlbmllUmVjdCB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgdG9wOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG4gIHJpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuaWVJbnRlcmZhY2VTcGVjIGV4dGVuZHMgR2VuaWVPYmplY3RTcGVjIHtcbiAgcmVjdDogR2VuaWVSZWN0O1xuICBpc0ZvY3VzZWRTY3JlZW4/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJpZXZlSW50ZXJmYWNlc1Jlc3VsdCB7XG4gIGludGVyZmFjZXM6IEdlbmllSW50ZXJmYWNlU3BlY1tdO1xuICB2aXNpYmlsaXR5U3RhdGU6IE5hdGl2ZVZpc2liaWxpdHlTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEluc3RhbnRpYXRlR2VuaWVPYmplY3Qob2JqZWN0U3BlYzogR2VuaWVPYmplY3RTcGVjKTogYW55IHtcbiAgY29uc3Qgb2JqZWN0S2V5ID0gb2JqZWN0U3BlYyAmJiBvYmplY3RTcGVjLmtleTtcbiAgaWYgKG9iamVjdEtleSAmJiBPYmplY3QuaGFzT3duKG9iamVjdEtleSwgXCJsb2NhbFN0b3JlXCIpKSB7XG4gICAgaWYgKG9iamVjdEtleVtcImxvY2FsU3RvcmVcIl1bXCJfX2dlbmllT2JqZWN0VHlwZVwiXSA9PSBcIkhlbHBlckNsYXNzXCIpIHtcbiAgICAgIHJldHVybiBvYmplY3RLZXk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG9iamVjdENsYXNzID0gQWxsR2VuaWVPYmplY3RzW29iamVjdFNwZWMuY2xhc3NOYW1lXSBhcyB0eXBlb2YgRGF0YUNsYXNzO1xuICByZXR1cm4gb2JqZWN0Q2xhc3MuR2V0T2JqZWN0KG9iamVjdFNwZWMua2V5KTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIGdlbmllIGNsYXNzIGludGVyZmFjZXMgd2l0aGluIG1vZGFsaXR5IHByb3ZpZGVyIGFuZCB0aGVpciByZWN0c1xuICogQHJldHVybnMge0dlbmllSW50ZXJmYWNlU3BlY1tdfSBSZXRyaWV2ZSBhbGwgdGhlIEdlbmllIG9iamVjdCBjb21wb25lbnRzIG9uIHRoZSBpbnRlcmZhY2UgYW5kIHRoZWlyIHJlY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZXRyaWV2ZUludGVyZmFjZXMoKTogR2VuaWVJbnRlcmZhY2VTcGVjW10ge1xuICByZXR1cm4gUmV0cmlldmVJbnRlcmZhY2VzU25hcHNob3QoKS5pbnRlcmZhY2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmV0cmlldmVJbnRlcmZhY2VzU25hcHNob3QoKTogUmV0cmlldmVJbnRlcmZhY2VzUmVzdWx0IHtcbiAgLy8gc2NhbiB0aHJvdWdoIHZhbHVlcyBvZiBBbGxHZW5pZU9iamVjdCBhbmQgZ2V0IHRoZSBkaXNwbGF5ZWRJbnN0YW5jZXNcbiAgY29uc29sZS5sb2coXG4gICAgYEFsbEdlbmllT2JqZWN0SW50ZXJmYWNlcyAke0pTT04uc3RyaW5naWZ5KEFsbEdlbmllRGlzcGxheWVkSW5zdGFuY2VzKX1gLFxuICApO1xuICBjb25zdCBkaXNwbGF5ZWRJbnN0YW5jZXM6IEdlbmllSW50ZXJmYWNlU3BlY1tdID0gW107XG4gIGZvciAoY29uc3Qga2V5IGluIEFsbEdlbmllRGlzcGxheWVkSW5zdGFuY2VzKSB7XG4gICAgZGlzcGxheWVkSW5zdGFuY2VzLnB1c2goQWxsR2VuaWVEaXNwbGF5ZWRJbnN0YW5jZXNba2V5XSgpKTtcbiAgfVxuICBjb25zdCByZXNvbHV0aW9uID0gcmVzb2x2ZVZpc2libGVJbnRlcmZhY2VzRm9yUGxhdGZvcm0oXG4gICAgUGxhdGZvcm0uT1MsXG4gICAgZGlzcGxheWVkSW5zdGFuY2VzLFxuICApO1xuICByZXR1cm4ge1xuICAgIGludGVyZmFjZXM6IHJlc29sdXRpb24uaW50ZXJmYWNlcyBhcyBHZW5pZUludGVyZmFjZVNwZWNbXSxcbiAgICB2aXNpYmlsaXR5U3RhdGU6IHJlc29sdXRpb24uc3RhdGUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZWZyZXNoRGlzcGxheWVkSW5zdGFuY2VSZWN0cygpOiB2b2lkIHtcbiAgLy8gUmUtbWVhc3VyZSBldmVyeSB2aXNpYmxlIGludGVyZmFjZSBqdXN0IGJlZm9yZSBnZW9tZXRyaWMgcmVzb2x1dGlvbiBzb1xuICAvLyBDdXJyZW50KCkgdXNlcyB0aGUgbGF0ZXN0IG9uLXNjcmVlbiBib3VuZHMgYWZ0ZXIgc2Nyb2xsaW5nLlxuICBmb3IgKGNvbnN0IGtleSBpbiBBbGxHZW5pZURpc3BsYXllZEluc3RhbmNlUmVmcmVzaGVycykge1xuICAgIEFsbEdlbmllRGlzcGxheWVkSW5zdGFuY2VSZWZyZXNoZXJzW2tleV0/LigpO1xuICB9XG59XG5cbmNvbnN0IHJlYWN0R2VuaWVDbGFzc01vZGlmaWVyOiBHZW5pZUNsYXNzTW9kaWZpZXIgPSAoXG4gIHRhcmdldDogdHlwZW9mIEdlbmllT2JqZWN0LFxuKSA9PiB7XG4gIC8vIGFwcGVuZCBtZXRob2QgYGN1cnJlbnQoKWAgdG8gdGhlIGNsYXNzXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIG1vc3QgcmVsZXZhbnQgaW5zdGFuY2Ugb2YgR2VuaWVPYmplY3QgaW4gdGhpcyBjb250ZXh0XG4gICAqIEByZXR1cm5zIHthbnl9IHRoZSBHZW5pZU9iamVjdFxuICAgKi9cbiAgZnVuY3Rpb24gQ3VycmVudCgpIHtcbiAgICBjb25zdCBjdXJyZW50Q2xhc3NOYW1lID0gdGFyZ2V0LkNsYXNzRGVzY3JpcHRvci5jbGFzc05hbWU7XG4gICAgY29uc3QgaW50ZXJmYWNlU25hcHNob3QgPSBSZXRyaWV2ZUludGVyZmFjZXNTbmFwc2hvdCgpO1xuICAgIGNvbnN0IGdlbmllSW50ZXJmYWNlcyA9IGludGVyZmFjZVNuYXBzaG90LmludGVyZmFjZXM7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgW0N1cnJlbnRdIHN0YXJ0ICR7Y3VycmVudENsYXNzTmFtZX07IHZpc2libGVJbnRlcmZhY2VzPSR7Z2VuaWVJbnRlcmZhY2VzLmxlbmd0aH07IHRhcHM9JHtDbGlja1BvaW50cy5sZW5ndGh9YCxcbiAgICApO1xuICAgIGlmIChpbnRlcmZhY2VTbmFwc2hvdC52aXNpYmlsaXR5U3RhdGUgPT09IFwidHJhbnNpdGlvbl91bnN0YWJsZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgQ3VycmVudENvbnRleHRFcnJvcihcbiAgICAgICAgYFZpc2libGUgJHtjdXJyZW50Q2xhc3NOYW1lfSBjb250ZXh0IGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIHdoaWxlIG5hdmlnYXRpb24gaXMgdHJhbnNpdGlvbmluZy5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEludGVyZmFjZSA9IHBpY2tDdXJyZW50SW50ZXJmYWNlKFxuICAgICAgY3VycmVudENsYXNzTmFtZSxcbiAgICAgIGdlbmllSW50ZXJmYWNlcyxcbiAgICAgIENsaWNrUG9pbnRzLFxuICAgICAge1xuICAgICAgICBibG9ja2VkUmVjdHM6IEN1cnJlbnRTZWxlY3Rpb25CbG9ja2VkUmVjdHMsXG4gICAgICB9LFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgW0N1cnJlbnRdIHJlc29sdmVkICR7Y3VycmVudENsYXNzTmFtZX0gLT4gJHtjdXJyZW50SW50ZXJmYWNlLmNsYXNzTmFtZX0gJHtKU09OLnN0cmluZ2lmeShjdXJyZW50SW50ZXJmYWNlLmtleSl9YCxcbiAgICApO1xuICAgIHJldHVybiBJbnN0YW50aWF0ZUdlbmllT2JqZWN0KGN1cnJlbnRJbnRlcmZhY2UpO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICB0YXJnZXQuQ3VycmVudCA9IEN1cnJlbnQ7XG5cbiAgLy8gYXBwZW5kIGFkZGl0aW9uYWwgZnVuY3Rpb24gZGVzY3JpcHRvciB0byBjbGFzcyBkZXNjcmlwdG9yXG4gIHVwc2VydEZ1bmN0aW9uRGVzY3JpcHRvcihcbiAgICB0YXJnZXQuQ2xhc3NEZXNjcmlwdG9yLmZ1bmN0aW9ucyBhcyB1bmtub3duIGFzIFNldDxhbnk+LFxuICAgIG5ldyBGdW5jRGVzY3JpcHRvcihcbiAgICAgICAgXCJDdXJyZW50XCIsXG4gICAgICAgIFtdLFxuICAgICAgICB0YXJnZXQuQ2xhc3NEZXNjcmlwdG9yLmNsYXNzTmFtZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgXCJUaGUgc2luZ2xlIG9iamVjdCB0aGF0IHRoZSB1c2VyIGlzIHJlZmVycmluZyB0by4gVXN1YWxseSBlaXRoZXIgdGhlIG9iamVjdCB0aGF0IGlzIGNsb3Nlc3QgdG8gdGhlIG1vdXNlIGNsaWNrLCBvciB0aGUgb2JqZWN0IHRoYXQgaXMgdGhlIGxhcmdlc3Qgb24gc2NyZWVuLlwiLFxuICAgICAgKSxcbiAgKTtcblxuICBmdW5jdGlvbiBBbGxDdXJyZW50KCkge1xuICAgIGNvbnN0IGN1cnJlbnRDbGFzc05hbWUgPSB0YXJnZXQuQ2xhc3NEZXNjcmlwdG9yLmNsYXNzTmFtZTtcbiAgICBjb25zdCBpbnRlcmZhY2VTbmFwc2hvdCA9IFJldHJpZXZlSW50ZXJmYWNlc1NuYXBzaG90KCk7XG4gICAgY29uc3QgZ2VuaWVJbnRlcmZhY2VzID0gaW50ZXJmYWNlU25hcHNob3QuaW50ZXJmYWNlcztcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gZ2VuaWVJbnRlcmZhY2VzLmZpbHRlcihcbiAgICAgIChnZW5pZUludGVyZmFjZSkgPT4gZ2VuaWVJbnRlcmZhY2UuY2xhc3NOYW1lID09PSBjdXJyZW50Q2xhc3NOYW1lLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgW0FsbEN1cnJlbnRdIHN0YXJ0ICR7Y3VycmVudENsYXNzTmFtZX07IHZpc2libGVJbnRlcmZhY2VzPSR7Z2VuaWVJbnRlcmZhY2VzLmxlbmd0aH07IGNhbmRpZGF0ZXM9JHtjYW5kaWRhdGVzLmxlbmd0aH07IHRhcHM9JHtDbGlja1BvaW50cy5sZW5ndGh9YCxcbiAgICApO1xuXG4gICAgY29uc3Qgb2JqZWN0czogYW55W10gPSBbXTtcblxuICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9iamVjdHM7XG4gICAgfVxuXG4gICAgaWYgKENsaWNrUG9pbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvciAoY29uc3QgY2xpY2tQb2ludCBvZiBDbGlja1BvaW50cykge1xuICAgICAgICBjb25zdCBjbG9zZXN0ID0gcGlja05lYXJlc3RJbnRlcmZhY2UoY2FuZGlkYXRlcywgY2xpY2tQb2ludCk7XG4gICAgICAgIG9iamVjdHMucHVzaChJbnN0YW50aWF0ZUdlbmllT2JqZWN0KGNsb3Nlc3QpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmplY3RzO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGdlbmllSW50ZXJmYWNlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgb2JqZWN0cy5wdXNoKEluc3RhbnRpYXRlR2VuaWVPYmplY3QoZ2VuaWVJbnRlcmZhY2UpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmplY3RzO1xuICAgIH1cbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgdGFyZ2V0LkFsbEN1cnJlbnQgPSBBbGxDdXJyZW50O1xuXG4gIC8vIGFwcGVuZCBhZGRpdGlvbmFsIGZ1bmN0aW9uIGRlc2NyaXB0b3IgdG8gY2xhc3MgZGVzY3JpcHRvclxuICB1cHNlcnRGdW5jdGlvbkRlc2NyaXB0b3IoXG4gICAgdGFyZ2V0LkNsYXNzRGVzY3JpcHRvci5mdW5jdGlvbnMgYXMgdW5rbm93biBhcyBTZXQ8YW55PixcbiAgICBuZXcgRnVuY0Rlc2NyaXB0b3IoXG4gICAgICAgIFwiQWxsQ3VycmVudFwiLFxuICAgICAgICBbXSxcbiAgICAgICAgdGFyZ2V0LkNsYXNzRGVzY3JpcHRvci5jbGFzc05hbWUgKyBcIltdXCIsXG4gICAgICAgIHRydWUsXG4gICAgICAgIFwiQWxsIG9iamVjdHMgdGhhdCB0aGUgdXNlciBpcyByZWZlcnJpbmcgdG8uIFVzdWFsbHkgZWl0aGVyIHRoZSBvYmplY3RzIHRoYXQgYXJlIGNsb3Nlc3QgdG8gdGhlIG1vdXNlIGNsaWNrcyAoaWYgbXVsdGlwbGUpLCBvciBhbGwgb2JqZWN0cyBvZiB0aGF0IHR5cGUgb24gc2NyZWVlbi5cIixcbiAgICAgICksXG4gICk7XG5cbiAgZ2VuaWVEaXNwYXRjaCgoKSA9PiB7XG4gICAgY29uc3QgbmV3RXhhbXBsZXMgPSBtZXJnZVVuaXF1ZUV4YW1wbGVzKFxuICAgICAgc2hhcmVkU3RhdGVbXCJfX0VYQU1QTEVTX19cIl0gfHwgW10sXG4gICAgICB0YXJnZXQuRXhhbXBsZXMgfHwgW10sXG4gICAgKTtcbiAgICBzZXRTaGFyZWRTdGF0ZSh7XG4gICAgICAuLi5zaGFyZWRTdGF0ZSxcbiAgICAgIFtcIl9fRVhBTVBMRVNfX1wiXTogbmV3RXhhbXBsZXMsXG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRSZWFjdEdlbmllKCk6IFN0b3JlPGFueSwgYW55PiB7XG4gIGNvbnN0IHJlYWN0R2VuaWVTdG9yZSA9IGluaXRHZW5pZSh7XG4gICAgaW5pdEdlbmllQ2xhc3NNb2RpZmllcjogcmVhY3RHZW5pZUNsYXNzTW9kaWZpZXIsXG4gIH0pO1xuICBnZW5pZURpc3BhdGNoKCgpID0+IHtcbiAgICBjb25zdCByZWFjdEdlbmllU3RhdGUgPSBzaGFyZWRTdGF0ZSBhcyBSZWFjdEdlbmllU3RhdGU7XG4gICAgcmVhY3RHZW5pZVN0YXRlLm5hdlN0YXRlID0ge1xuICAgICAgb2JqZWN0Vmlld0NsYXNzTmFtZTogbnVsbCxcbiAgICAgIG9iamVjdENvbnN0cnVjdG9yUGFyYW1zOiBudWxsLFxuICAgICAgcXVlcnlJbnRlbnQ6IG51bGwsXG4gICAgICByZXN1bHRSZWY6IG51bGwsXG4gICAgICByZXN1bHRPYmplY3RUeXBlOiBudWxsLFxuICAgIH07XG4gICAgcmVhY3RHZW5pZVN0YXRlLm5hdlN0YWNrID0gMDtcbiAgICByZWFjdEdlbmllU3RhdGUubWVzc2FnZSA9IHtcbiAgICAgIG1pbmltYWxUZXh0OiBcIlwiLFxuICAgICAgZnVsbFRleHQ6IFwiXCIsXG4gICAgICB0eXBlOiBcImluZm9cIixcbiAgICAgIHNob3VsZFNwZWFrOiBmYWxzZSxcbiAgICAgIG9yaWdpbjogXCJzeXN0ZW1cIixcbiAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgfTtcbiAgICByZWFjdEdlbmllU3RhdGUucmVzdWx0V2luZG93QnlSZWYgPSB7fTtcbiAgICByZWFjdEdlbmllU3RhdGUucmVzdWx0V2luZG93T3JkZXIgPSBbXTtcbiAgICByZWFjdEdlbmllU3RhdGUucmVzdWx0V2luZG93TWF4ID0gNDA7XG4gICAgcmVhY3RHZW5pZVN0YXRlLnJlc3VsdFdpbmRvd1R0bE1zID0gNSAqIDYwICogMTAwMDtcbiAgICByZWFjdEdlbmllU3RhdGUucmVzdWx0V2luZG93U2VxdWVuY2UgPSAwO1xuICB9KTtcbiAgcmV0dXJuIHJlYWN0R2VuaWVTdG9yZTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHR5cGUgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyByZW5kZXJlZCBieSB0aGUgaW50ZXJmYWNlXG4gKiBAcGFyYW0gZGlzcGxheVRpdGxlIHRoZSB0aXRsZSBvZiB0aGUgaW50ZXJmYWNlLCBjYW4gYmUgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGluIHRoZSBvYmplY3QgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqIEBwYXJhbSBkaXNwbGF5UHJpb3JpdHkgdGhlIHByaW9yaXR5IG9mIHRoZSBpbnRlcmZhY2UsIGNhbiBiZSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaW4gdGhlIG9iamVjdCBhbmQgcmV0dXJucyBhIG51bWJlclxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBHZW5pZUNsYXNzSW50ZXJmYWNlKFxuICB0eXBlOiBzdHJpbmcsXG4gIGRpc3BsYXlUaXRsZTogc3RyaW5nIHwgKChhbnkpID0+IHN0cmluZykgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIGRpc3BsYXlQcmlvcml0eTogbnVtYmVyIHwgKCh0YXJnZXQ6IGFueSkgPT4gbnVtYmVyKSA9IDAsXG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IGFueSkge1xuICAgIC8vIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYSBsaXN0IG9mIHBhcmFtZXRlcnNcbiAgICBjb25zdCBuZXdUYXJnZXQgPSAoLi4uYXJncykgPT4ge1xuICAgICAgcmV0dXJuIEdlbmllVmlld1dyYXBwZXIodHlwZSwgdGFyZ2V0LCBhcmdzKSgpO1xuICAgIH07XG4gICAgaWYgKGRpc3BsYXlUaXRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkaXNwbGF5VGl0bGUgPSB0eXBlO1xuICAgIH1cbiAgICBjb25zdCB0aXRsZUZ1bmN0aW9uID1cbiAgICAgIHR5cGVvZiBkaXNwbGF5VGl0bGUgPT09IFwic3RyaW5nXCIgPyAoKSA9PiBkaXNwbGF5VGl0bGUgOiBkaXNwbGF5VGl0bGU7XG4gICAgY29uc3QgZGlzcGxheVByaW9yaXR5RnVuY3Rpb24gPVxuICAgICAgdHlwZW9mIGRpc3BsYXlQcmlvcml0eSA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/ICgpID0+IGRpc3BsYXlQcmlvcml0eVxuICAgICAgICA6IGRpc3BsYXlQcmlvcml0eTtcbiAgICBjb25zdCBuZXdHZW5pZUludGVyZmFjZVNwZWM6IEdlbmllSW50ZXJmYWNlU3RvcmVFbGVtZW50ID0ge1xuICAgICAgb2JqZWN0Q2xhc3NOYW1lOiB0eXBlLFxuICAgICAgdmlld0NsYXNzTmFtZTogdGFyZ2V0Lm5hbWUsXG4gICAgICB0aXRsZTogdGl0bGVGdW5jdGlvbiBhcyAoYW55OiBhbnkpID0+IHN0cmluZyxcbiAgICAgIGZ1bmN0aW9uOiBuZXdUYXJnZXQsXG4gICAgICBkaXNwbGF5UHJpb3JpdHk6IGRpc3BsYXlQcmlvcml0eUZ1bmN0aW9uLFxuICAgIH07XG4gICAgQWxsR2VuaWVPYmplY3RJbnRlcmZhY2VzLmFkZEludGVyZmFjZShuZXdHZW5pZUludGVyZmFjZVNwZWMpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIE5vdGU6IEF1dG9tYXRpYyByb3V0ZSByZWdpc3RyYXRpb24gYmFzZWQgb24gY29udmVudGlvbiAob3B0aW9uYWwsIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGV4cGxpY2l0IHJlZ2lzdHJhdGlvbiBpbiBjb21wb25lbnRzKSBcbiAgICAgKiAtIGZvciBleGFtcGxlLCB3ZSBjYW4gYXV0b21hdGljYWxseSByZWdpc3RlciBhbiBpbnRlcmZhY2UgZm9yIGEgR2VuaWVPYmplY3QgY2xhc3MgbmFtZWQgXCJFbWFpbFwiIHdpdGggYSBjb21wb25lbnQgbmFtZWQgXCJFbWFpbEludGVyZmFjZVwiLiBUaGlzIGFsbG93cyBmb3IgbW9yZSBzZWFtbGVzcyBpbnRlZ3JhdGlvbiBvZiBuZXcgY29tcG9uZW50cyBhbmQgaW50ZXJmYWNlcyB3aXRob3V0IG5lZWRpbmcgdG8gd29ycnkgYWJvdXQgcmVnaXN0cmF0aW9uIG9yZGVyLiBcbiAgICAgKiBIb3dldmVyLCBleHBsaWNpdCByZWdpc3RyYXRpb24gaXMgc3RpbGwgc3VwcG9ydGVkIGFuZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIGlmIGRlc2lyZWQuXG4gICAgICogV2UgY2FuIGhhdmUgbXVsdGlwbGUgaW50ZXJmYWNlcyBmb3IgdGhlIHNhbWUgb2JqZWN0IHR5cGUgd2l0aG91dCB3b3JyeWluZyBhYm91dCByZWdpc3RyYXRpb24gb3JkZXIuXG4gICAgICovIFxuXG4gICAgLy8gYWRkIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggc2hhcmVkIGRhdGEgc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgb24vb2ZmIHNjcmVlblxuICAgIHJldHVybiBSZWFjdC5tZW1vKG5ld1RhcmdldCk7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxpQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsY0FBQSxHQUFBRixPQUFBO0FBdUNBLElBQUFHLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUdBLElBQUFLLGlCQUFBLEdBQUFMLE9BQUE7QUFLQSxJQUFBTSxpQkFBQSxHQUFBTixPQUFBO0FBRzZCLFNBQUFJLHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQUcsUUFBQUgsQ0FBQSxFQUFBSSxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFQLENBQUEsT0FBQU0sTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQVIsQ0FBQSxHQUFBSSxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBWCxDQUFBLEVBQUFJLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVB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
388
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2VuaWVWaWV3V3JhcHBlciIsInJlcXVpcmUiLCJfcmVhY3ROYXRpdmUiLCJfcmVhY3RnZW5pZURzbCIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY3VycmVudFNlbGVjdGlvbiIsIl9uYXRpdmVWaXNpYmlsaXR5IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIkdlbmllSW50ZXJmYWNlc1N0b3JlIiwiY29uc3RydWN0b3IiLCJzdXBwb3J0ZWRUeXBlcyIsIlNldCIsImludGVyZmFjZXMiLCJhZGRJbnRlcmZhY2UiLCJlbGVtZW50Iiwib2JqZWN0Q2xhc3NOYW1lIiwiYWRkIiwiZ2V0T2JqZWN0Q2xhc3NOYW1lIiwib2JqZWN0IiwiZ2V0U3RhYmxlR2VuaWVPYmplY3RDbGFzc05hbWUiLCJnZXRJbnRlcmZhY2VzIiwiY2xhc3NOYW1lIiwic29ydGVkSW50ZXJmYWNlcyIsInNvcnQiLCJhIiwiYiIsImRpc3BsYXlQcmlvcml0eSIsImFsbEludGVyZmFjZXMiLCJrZXkiLCJ2aWV3Q2xhc3NOYW1lIiwiQWxsR2VuaWVPYmplY3RJbnRlcmZhY2VzIiwiZXhwb3J0cyIsIkFycmF5IiwiaXNBcnJheSIsIml0ZW1DbGFzc05hbWUiLCJkZXNjcmlwdG9yQ2xhc3NOYW1lIiwiQ2xhc3NEZXNjcmlwdG9yIiwic2VyaWFsaXplZENsYXNzTmFtZSIsIl9fZ2VuaWVPYmplY3RDbGFzcyIsImNvbnN0cnVjdG9yTmFtZSIsIm5hbWUiLCJBbGxHZW5pZURpc3BsYXllZEluc3RhbmNlcyIsIkFsbEdlbmllRGlzcGxheWVkSW5zdGFuY2VSZWZyZXNoZXJzIiwiQ2xpY2tQb2ludHMiLCJDdXJyZW50U2VsZWN0aW9uQmxvY2tlZFJlY3RzIiwidG9TdHJpbmdPckVtcHR5IiwiZXhhbXBsZUtleSIsImV4YW1wbGUiLCJ1c2VyX3V0dGVyYW5jZSIsImV4YW1wbGVfcGFyc2VkIiwibm9ybWFsaXplUGFyYW1zIiwicGFyYW1zIiwiaGFzU2FtZUZ1bmN0aW9uU2lnbmF0dXJlIiwibGVmdCIsInJpZ2h0IiwiZnVuY19uYW1lIiwiaXNTdGF0aWMiLCJyZXR1cm5UeXBlIiwibGVmdFBhcmFtcyIsInBhcmFtZXRlcnMiLCJyaWdodFBhcmFtcyIsInR5cGUiLCJyZXF1aXJlZCIsInVwc2VydEZ1bmN0aW9uRGVzY3JpcHRvciIsImZ1bmN0aW9ucyIsImNhbmRpZGF0ZSIsImV4aXN0aW5nIiwibWVyZ2VVbmlxdWVFeGFtcGxlcyIsImluY29taW5nIiwibWVyZ2VkIiwic2VlbiIsIm1hcCIsImhhcyIsIkluc3RhbnRpYXRlR2VuaWVPYmplY3QiLCJvYmplY3RTcGVjIiwib2JqZWN0S2V5IiwiaGFzT3duIiwib2JqZWN0Q2xhc3MiLCJBbGxHZW5pZU9iamVjdHMiLCJHZXRPYmplY3QiLCJSZXRyaWV2ZUludGVyZmFjZXMiLCJSZXRyaWV2ZUludGVyZmFjZXNTbmFwc2hvdCIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZGlzcGxheWVkSW5zdGFuY2VzIiwicmVzb2x1dGlvbiIsInJlc29sdmVWaXNpYmxlSW50ZXJmYWNlc0ZvclBsYXRmb3JtIiwiUGxhdGZvcm0iLCJPUyIsInZpc2liaWxpdHlTdGF0ZSIsInN0YXRlIiwiUmVmcmVzaERpc3BsYXllZEluc3RhbmNlUmVjdHMiLCJyZWFjdEdlbmllQ2xhc3NNb2RpZmllciIsInRhcmdldCIsIkN1cnJlbnQiLCJjdXJyZW50Q2xhc3NOYW1lIiwiaW50ZXJmYWNlU25hcHNob3QiLCJnZW5pZUludGVyZmFjZXMiLCJDdXJyZW50Q29udGV4dEVycm9yIiwiY3VycmVudEludGVyZmFjZSIsInBpY2tDdXJyZW50SW50ZXJmYWNlIiwiYmxvY2tlZFJlY3RzIiwiRnVuY0Rlc2NyaXB0b3IiLCJBbGxDdXJyZW50IiwiY2FuZGlkYXRlcyIsImdlbmllSW50ZXJmYWNlIiwib2JqZWN0cyIsImNsaWNrUG9pbnQiLCJjbG9zZXN0IiwicGlja05lYXJlc3RJbnRlcmZhY2UiLCJnZW5pZURpc3BhdGNoIiwibmV3RXhhbXBsZXMiLCJzaGFyZWRTdGF0ZSIsIkV4YW1wbGVzIiwic2V0U2hhcmVkU3RhdGUiLCJpbml0UmVhY3RHZW5pZSIsInJlYWN0R2VuaWVTdG9yZSIsImluaXRHZW5pZSIsImluaXRHZW5pZUNsYXNzTW9kaWZpZXIiLCJyZWFjdEdlbmllU3RhdGUiLCJuYXZTdGF0ZSIsIm9iamVjdFZpZXdDbGFzc05hbWUiLCJvYmplY3RDb25zdHJ1Y3RvclBhcmFtcyIsInF1ZXJ5SW50ZW50IiwicmVzdWx0UmVmIiwicmVzdWx0T2JqZWN0VHlwZSIsIm5hdlN0YWNrIiwibWVzc2FnZSIsIm1pbmltYWxUZXh0IiwiZnVsbFRleHQiLCJzaG91bGRTcGVhayIsIm9yaWdpbiIsInJlc3VsdFdpbmRvd0J5UmVmIiwicmVzdWx0V2luZG93T3JkZXIiLCJyZXN1bHRXaW5kb3dNYXgiLCJyZXN1bHRXaW5kb3dUdGxNcyIsInJlc3VsdFdpbmRvd1NlcXVlbmNlIiwiR2VuaWVDbGFzc0ludGVyZmFjZSIsImRpc3BsYXlUaXRsZSIsInVuZGVmaW5lZCIsIm5ld1RhcmdldCIsImFyZ3MiLCJHZW5pZVZpZXdXcmFwcGVyIiwidGl0bGVGdW5jdGlvbiIsImRpc3BsYXlQcmlvcml0eUZ1bmN0aW9uIiwibmV3R2VuaWVJbnRlcmZhY2VTcGVjIiwidGl0bGUiLCJmdW5jdGlvbiIsIlJlYWN0IiwibWVtbyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWFjdC1kZWNvcmF0b3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGRpY3Rpb25hcnkgb2YgZ2VuaWUgb2JqZWN0IG5hbWVzIHRvIGdlbmllIG9iamVjdHNcbmltcG9ydCB7IEdlbmllVmlld1dyYXBwZXIgfSBmcm9tIFwiLi9nZW5pZS12aWV3LXdyYXBwZXJcIjtcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSBcInJlYWN0LW5hdGl2ZVwiO1xuaW1wb3J0IHtcbiAgRnVuY0Rlc2NyaXB0b3IsXG4gIEdlbmllQ2xhc3NNb2RpZmllcixcbiAgR2VuaWVPYmplY3QsXG4gIGluaXRHZW5pZSxcbiAgZ2VuaWVEaXNwYXRjaCxcbiAgQWxsR2VuaWVPYmplY3RzLFxuICBzaGFyZWRTdGF0ZSxcbiAgc2hhcmVkU3RvcmUsXG4gIHNldFNoYXJlZFN0YXRlLFxufSBmcm9tIFwiQGdhcnJpeDgyL3JlYWN0Z2VuaWUtZHNsXCI7XG5pbXBvcnQge1xuICBHZW5pZUNsYXNzLFxuICBHZW5pZUZ1bmN0aW9uLFxuICBHZW5pZUtleSxcbiAgR2VuaWVQcm9wZXJ0eSxcbiAgRGF0YUNsYXNzLFxuICBIZWxwZXJDbGFzcyxcbiAgaW50LFxuICBmbG9hdCxcbiAgQ2xhc3NEZXNjcmlwdG9yLFxuICBGaWVsZERlc2NyaXB0b3IsXG4gIFBhcmFtRGVzY3JpcHRvcixcbn0gZnJvbSBcIkBnYXJyaXg4Mi9yZWFjdGdlbmllLWRzbFwiO1xuXG5leHBvcnQge1xuICBHZW5pZUNsYXNzLFxuICBHZW5pZUZ1bmN0aW9uLFxuICBHZW5pZUtleSxcbiAgR2VuaWVQcm9wZXJ0eSxcbiAgRGF0YUNsYXNzLFxuICBIZWxwZXJDbGFzcyxcbiAgaW50LFxuICBmbG9hdCxcbiAgQ2xhc3NEZXNjcmlwdG9yLFxuICBGaWVsZERlc2NyaXB0b3IsXG4gIEZ1bmNEZXNjcmlwdG9yLFxuICBQYXJhbURlc2NyaXB0b3IsXG59IGZyb20gXCJAZ2Fycml4ODIvcmVhY3RnZW5pZS1kc2xcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0R2VuaWVTdGF0ZSB9IGZyb20gXCIuL3NoYXJlZC1zdG9yZVwiO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQge1xuICBDdXJyZW50Q29udGV4dEVycm9yLFxuICBwaWNrQ3VycmVudEludGVyZmFjZSxcbiAgcGlja05lYXJlc3RJbnRlcmZhY2UsXG59IGZyb20gXCIuL2N1cnJlbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1xuICB0eXBlIE5hdGl2ZVZpc2liaWxpdHlTdGF0ZSxcbiAgcmVzb2x2ZVZpc2libGVJbnRlcmZhY2VzRm9yUGxhdGZvcm0sXG59IGZyb20gXCIuL25hdGl2ZS12aXNpYmlsaXR5XCI7XG5cbmV4cG9ydCB7IEFsbEdlbmllT2JqZWN0cyB9IGZyb20gXCJAZ2Fycml4ODIvcmVhY3RnZW5pZS1kc2xcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHZW5pZUludGVyZmFjZVN0b3JlRWxlbWVudCB7XG4gIG9iamVjdENsYXNzTmFtZTogc3RyaW5nO1xuICB2aWV3Q2xhc3NOYW1lOiBzdHJpbmc7XG4gIHRpdGxlOiAoYW55KSA9PiBzdHJpbmc7XG4gIGZ1bmN0aW9uOiBhbnk7XG4gIGRpc3BsYXlQcmlvcml0eTogKHRhcmdldDogYW55KSA9PiBudW1iZXI7XG59XG5cbmNsYXNzIEdlbmllSW50ZXJmYWNlc1N0b3JlIHtcbiAgc3VwcG9ydGVkVHlwZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGludGVyZmFjZXM6IHsgW2tleTogc3RyaW5nXTogR2VuaWVJbnRlcmZhY2VTdG9yZUVsZW1lbnRbXSB9ID0ge307XG5cbiAgYWRkSW50ZXJmYWNlKGVsZW1lbnQ6IEdlbmllSW50ZXJmYWNlU3RvcmVFbGVtZW50KSB7XG4gICAgaWYgKCF0aGlzLmludGVyZmFjZXNbZWxlbWVudC5vYmplY3RDbGFzc05hbWVdKSB7XG4gICAgICB0aGlzLmludGVyZmFjZXNbZWxlbWVudC5vYmplY3RDbGFzc05hbWVdID0gW107XG4gICAgfVxuICAgIHRoaXMuaW50ZXJmYWNlc1tlbGVtZW50Lm9iamVjdENsYXNzTmFtZV0ucHVzaChlbGVtZW50KTtcbiAgICB0aGlzLnN1cHBvcnRlZFR5cGVzLmFkZChlbGVtZW50Lm9iamVjdENsYXNzTmFtZSk7XG4gIH1cblxuICBnZXRPYmplY3RDbGFzc05hbWUob2JqZWN0OiBHZW5pZU9iamVjdCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBnZXRTdGFibGVHZW5pZU9iamVjdENsYXNzTmFtZShvYmplY3QpO1xuICB9XG5cbiAgZ2V0SW50ZXJmYWNlcyhvYmplY3Q6IEdlbmllT2JqZWN0KTogR2VuaWVJbnRlcmZhY2VTdG9yZUVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmdldE9iamVjdENsYXNzTmFtZShvYmplY3QpO1xuICAgIGlmIChjbGFzc05hbWUgJiYgdGhpcy5pbnRlcmZhY2VzW2NsYXNzTmFtZV0pIHtcbiAgICAgIGNvbnN0IHNvcnRlZEludGVyZmFjZXMgPSB0aGlzLmludGVyZmFjZXNbY2xhc3NOYW1lXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiBiLmRpc3BsYXlQcmlvcml0eShvYmplY3QpIC0gYS5kaXNwbGF5UHJpb3JpdHkob2JqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNvcnRlZEludGVyZmFjZXNbMF07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8ga2V5IGlzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBHZW5pZUludGVyZmFjZVN0b3JlRWxlbWVudCwgbm90IHRoZSBHZW5pZU9iamVjdFxuICBhbGxJbnRlcmZhY2VzKCk6IHsgW2tleTogc3RyaW5nXTogR2VuaWVJbnRlcmZhY2VTdG9yZUVsZW1lbnQgfSB7XG4gICAgY29uc3QgYWxsSW50ZXJmYWNlczogeyBba2V5OiBzdHJpbmddOiBHZW5pZUludGVyZmFjZVN0b3JlRWxlbWVudCB9ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5pbnRlcmZhY2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5pbnRlcmZhY2VzW2tleV0pIHtcbiAgICAgICAgYWxsSW50ZXJmYWNlc1tlbGVtZW50LnZpZXdDbGFzc05hbWVdID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsbEludGVyZmFjZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEdlbmllT2JqZWN0SW50ZXJmYWNlczogR2VuaWVJbnRlcmZhY2VzU3RvcmUgPVxuICBuZXcgR2VuaWVJbnRlcmZhY2VzU3RvcmUoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YWJsZUdlbmllT2JqZWN0Q2xhc3NOYW1lKG9iamVjdDogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICBjb25zdCBpdGVtQ2xhc3NOYW1lID0gZ2V0U3RhYmxlR2VuaWVPYmplY3RDbGFzc05hbWUob2JqZWN0WzBdKTtcbiAgICByZXR1cm4gaXRlbUNsYXNzTmFtZSA/IGAke2l0ZW1DbGFzc05hbWV9W11gIDogbnVsbDtcbiAgfVxuXG4gIGlmICghb2JqZWN0IHx8ICh0eXBlb2Ygb2JqZWN0ICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmplY3QgIT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGRlc2NyaXB0b3JDbGFzc05hbWUgPVxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/LkNsYXNzRGVzY3JpcHRvcj8uY2xhc3NOYW1lID8/XG4gICAgb2JqZWN0Py5DbGFzc0Rlc2NyaXB0b3I/LmNsYXNzTmFtZTtcbiAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yQ2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGRlc2NyaXB0b3JDbGFzc05hbWUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkZXNjcmlwdG9yQ2xhc3NOYW1lO1xuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZENsYXNzTmFtZSA9IG9iamVjdD8uX19nZW5pZU9iamVjdENsYXNzO1xuICBpZiAodHlwZW9mIHNlcmlhbGl6ZWRDbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgc2VyaWFsaXplZENsYXNzTmFtZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRDbGFzc05hbWU7XG4gIH1cblxuICBjb25zdCBjb25zdHJ1Y3Rvck5hbWUgPSBvYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lO1xuICBpZiAodHlwZW9mIGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBjb25zdHJ1Y3Rvck5hbWUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvck5hbWU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IEFsbEdlbmllRGlzcGxheWVkSW5zdGFuY2VzOiB7XG4gIFtrZXk6IHN0cmluZ106ICgpID0+IEdlbmllSW50ZXJmYWNlU3BlYztcbn0gPSB7fTtcblxuZXhwb3J0IGNvbnN0IEFsbEdlbmllRGlzcGxheWVkSW5zdGFuY2VSZWZyZXNoZXJzOiB7XG4gIFtrZXk6IHN0cmluZ106ICgpID0+IHZvaWQ7XG59ID0ge307XG5cbmV4cG9ydCBjb25zdCBDbGlja1BvaW50czogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9W10gPSBbXTtcbmV4cG9ydCBjb25zdCBDdXJyZW50U2VsZWN0aW9uQmxvY2tlZFJlY3RzOiBBcnJheTx7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn0+ID0gW107XG5cbmV4cG9ydCB0eXBlIEV4YW1wbGVMaWtlID0ge1xuICB1c2VyX3V0dGVyYW5jZT86IHVua25vd247XG4gIGV4YW1wbGVfcGFyc2VkPzogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIEZ1bmNQYXJhbUxpa2UgPSB7XG4gIG5hbWU/OiB1bmtub3duO1xuICB0eXBlPzogdW5rbm93bjtcbiAgcmVxdWlyZWQ/OiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgRnVuY0Rlc2NyaXB0b3JMaWtlID0ge1xuICBmdW5jX25hbWU/OiB1bmtub3duO1xuICBpc1N0YXRpYz86IHVua25vd247XG4gIHJldHVyblR5cGU/OiB1bmtub3duO1xuICBwYXJhbWV0ZXJzPzogdW5rbm93bjtcbn07XG5cbmZ1bmN0aW9uIHRvU3RyaW5nT3JFbXB0eSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGV4YW1wbGVLZXkoZXhhbXBsZTogRXhhbXBsZUxpa2UpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7dG9TdHJpbmdPckVtcHR5KGV4YW1wbGU/LnVzZXJfdXR0ZXJhbmNlKX1cXG4ke3RvU3RyaW5nT3JFbXB0eShcbiAgICBleGFtcGxlPy5leGFtcGxlX3BhcnNlZCxcbiAgKX1gO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXJhbXMocGFyYW1zOiB1bmtub3duKTogRnVuY1BhcmFtTGlrZVtdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFyYW1zKSA/IChwYXJhbXMgYXMgRnVuY1BhcmFtTGlrZVtdKSA6IFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzU2FtZUZ1bmN0aW9uU2lnbmF0dXJlKFxuICBsZWZ0OiBGdW5jRGVzY3JpcHRvckxpa2UsXG4gIHJpZ2h0OiBGdW5jRGVzY3JpcHRvckxpa2UsXG4pOiBib29sZWFuIHtcbiAgaWYgKGxlZnQ/LmZ1bmNfbmFtZSAhPT0gcmlnaHQ/LmZ1bmNfbmFtZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobGVmdD8uaXNTdGF0aWMgIT09IHJpZ2h0Py5pc1N0YXRpYykgcmV0dXJuIGZhbHNlO1xuICBpZiAobGVmdD8ucmV0dXJuVHlwZSAhPT0gcmlnaHQ/LnJldHVyblR5cGUpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBsZWZ0UGFyYW1zID0gbm9ybWFsaXplUGFyYW1zKGxlZnQ/LnBhcmFtZXRlcnMpO1xuICBjb25zdCByaWdodFBhcmFtcyA9IG5vcm1hbGl6ZVBhcmFtcyhyaWdodD8ucGFyYW1ldGVycyk7XG5cbiAgaWYgKGxlZnRQYXJhbXMubGVuZ3RoICE9PSByaWdodFBhcmFtcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlZnRQYXJhbXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBhID0gbGVmdFBhcmFtc1tpXTtcbiAgICBjb25zdCBiID0gcmlnaHRQYXJhbXNbaV07XG4gICAgaWYgKGE/Lm5hbWUgIT09IGI/Lm5hbWUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoYT8udHlwZSAhPT0gYj8udHlwZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhPy5yZXF1aXJlZCAhPT0gYj8ucmVxdWlyZWQpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBzZXJ0RnVuY3Rpb25EZXNjcmlwdG9yKFxuICBmdW5jdGlvbnM6IFNldDxGdW5jRGVzY3JpcHRvckxpa2U+LFxuICBjYW5kaWRhdGU6IEZ1bmNEZXNjcmlwdG9yTGlrZSxcbik6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IGV4aXN0aW5nIG9mIGZ1bmN0aW9ucykge1xuICAgIGlmIChoYXNTYW1lRnVuY3Rpb25TaWduYXR1cmUoZXhpc3RpbmcsIGNhbmRpZGF0ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb25zLmFkZChjYW5kaWRhdGUpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlVW5pcXVlRXhhbXBsZXM8VCBleHRlbmRzIEV4YW1wbGVMaWtlPihcbiAgZXhpc3Rpbmc6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGluY29taW5nOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogVFtdIHtcbiAgY29uc3QgbWVyZ2VkID0gWy4uLihleGlzdGluZyB8fCBbXSldO1xuICBjb25zdCBzZWVuID0gbmV3IFNldChtZXJnZWQubWFwKChleGFtcGxlKSA9PiBleGFtcGxlS2V5KGV4YW1wbGUpKSk7XG5cbiAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgaW5jb21pbmcgfHwgW10pIHtcbiAgICBjb25zdCBrZXkgPSBleGFtcGxlS2V5KGNhbmRpZGF0ZSk7XG4gICAgaWYgKHNlZW4uaGFzKGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBzZWVuLmFkZChrZXkpO1xuICAgIG1lcmdlZC5wdXNoKGNhbmRpZGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG5pbnRlcmZhY2UgR2VuaWVPYmplY3RTcGVjIHtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGtleTogYW55O1xufVxuXG5pbnRlcmZhY2UgR2VuaWVSZWN0IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgbGVmdDogbnVtYmVyO1xuICBib3R0b206IG51bWJlcjtcbiAgcmlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5pZUludGVyZmFjZVNwZWMgZXh0ZW5kcyBHZW5pZU9iamVjdFNwZWMge1xuICByZWN0OiBHZW5pZVJlY3Q7XG4gIGlzRm9jdXNlZFNjcmVlbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cmlldmVJbnRlcmZhY2VzUmVzdWx0IHtcbiAgaW50ZXJmYWNlczogR2VuaWVJbnRlcmZhY2VTcGVjW107XG4gIHZpc2liaWxpdHlTdGF0ZTogTmF0aXZlVmlzaWJpbGl0eVN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSW5zdGFudGlhdGVHZW5pZU9iamVjdChvYmplY3RTcGVjOiBHZW5pZU9iamVjdFNwZWMpOiBhbnkge1xuICBjb25zdCBvYmplY3RLZXkgPSBvYmplY3RTcGVjICYmIG9iamVjdFNwZWMua2V5O1xuICBpZiAob2JqZWN0S2V5ICYmIE9iamVjdC5oYXNPd24ob2JqZWN0S2V5LCBcImxvY2FsU3RvcmVcIikpIHtcbiAgICBpZiAob2JqZWN0S2V5W1wibG9jYWxTdG9yZVwiXVtcIl9fZ2VuaWVPYmplY3RUeXBlXCJdID09IFwiSGVscGVyQ2xhc3NcIikge1xuICAgICAgcmV0dXJuIG9iamVjdEtleTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgb2JqZWN0Q2xhc3MgPSBBbGxHZW5pZU9iamVjdHNbb2JqZWN0U3BlYy5jbGFzc05hbWVdIGFzIHR5cGVvZiBEYXRhQ2xhc3M7XG4gIHJldHVybiBvYmplY3RDbGFzcy5HZXRPYmplY3Qob2JqZWN0U3BlYy5rZXkpO1xufVxuXG4vKipcbiAqIEdldCBhbGwgZ2VuaWUgY2xhc3MgaW50ZXJmYWNlcyB3aXRoaW4gbW9kYWxpdHkgcHJvdmlkZXIgYW5kIHRoZWlyIHJlY3RzXG4gKiBAcmV0dXJucyB7R2VuaWVJbnRlcmZhY2VTcGVjW119IFJldHJpZXZlIGFsbCB0aGUgR2VuaWUgb2JqZWN0IGNvbXBvbmVudHMgb24gdGhlIGludGVyZmFjZSBhbmQgdGhlaXIgcmVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJldHJpZXZlSW50ZXJmYWNlcygpOiBHZW5pZUludGVyZmFjZVNwZWNbXSB7XG4gIHJldHVybiBSZXRyaWV2ZUludGVyZmFjZXNTbmFwc2hvdCgpLmludGVyZmFjZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXRyaWV2ZUludGVyZmFjZXNTbmFwc2hvdCgpOiBSZXRyaWV2ZUludGVyZmFjZXNSZXN1bHQge1xuICAvLyBzY2FuIHRocm91Z2ggdmFsdWVzIG9mIEFsbEdlbmllT2JqZWN0IGFuZCBnZXQgdGhlIGRpc3BsYXllZEluc3RhbmNlc1xuICBjb25zb2xlLmxvZyhcbiAgICBgQWxsR2VuaWVPYmplY3RJbnRlcmZhY2VzICR7SlNPTi5zdHJpbmdpZnkoQWxsR2VuaWVEaXNwbGF5ZWRJbnN0YW5jZXMpfWAsXG4gICk7XG4gIGNvbnN0IGRpc3BsYXllZEluc3RhbmNlczogR2VuaWVJbnRlcmZhY2VTcGVjW10gPSBbXTtcbiAgZm9yIChjb25zdCBrZXkgaW4gQWxsR2VuaWVEaXNwbGF5ZWRJbnN0YW5jZXMpIHtcbiAgICBkaXNwbGF5ZWRJbnN0YW5jZXMucHVzaChBbGxHZW5pZURpc3BsYXllZEluc3RhbmNlc1trZXldKCkpO1xuICB9XG4gIGNvbnN0IHJlc29sdXRpb24gPSByZXNvbHZlVmlzaWJsZUludGVyZmFjZXNGb3JQbGF0Zm9ybShcbiAgICBQbGF0Zm9ybS5PUyxcbiAgICBkaXNwbGF5ZWRJbnN0YW5jZXMsXG4gICk7XG4gIHJldHVybiB7XG4gICAgaW50ZXJmYWNlczogcmVzb2x1dGlvbi5pbnRlcmZhY2VzIGFzIEdlbmllSW50ZXJmYWNlU3BlY1tdLFxuICAgIHZpc2liaWxpdHlTdGF0ZTogcmVzb2x1dGlvbi5zdGF0ZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlZnJlc2hEaXNwbGF5ZWRJbnN0YW5jZVJlY3RzKCk6IHZvaWQge1xuICAvLyBSZS1tZWFzdXJlIGV2ZXJ5IHZpc2libGUgaW50ZXJmYWNlIGp1c3QgYmVmb3JlIGdlb21ldHJpYyByZXNvbHV0aW9uIHNvXG4gIC8vIEN1cnJlbnQoKSB1c2VzIHRoZSBsYXRlc3Qgb24tc2NyZWVuIGJvdW5kcyBhZnRlciBzY3JvbGxpbmcuXG4gIGZvciAoY29uc3Qga2V5IGluIEFsbEdlbmllRGlzcGxheWVkSW5zdGFuY2VSZWZyZXNoZXJzKSB7XG4gICAgQWxsR2VuaWVEaXNwbGF5ZWRJbnN0YW5jZVJlZnJlc2hlcnNba2V5XT8uKCk7XG4gIH1cbn1cblxuY29uc3QgcmVhY3RHZW5pZUNsYXNzTW9kaWZpZXI6IEdlbmllQ2xhc3NNb2RpZmllciA9IChcbiAgdGFyZ2V0OiB0eXBlb2YgR2VuaWVPYmplY3QsXG4pID0+IHtcbiAgLy8gYXBwZW5kIG1ldGhvZCBgY3VycmVudCgpYCB0byB0aGUgY2xhc3NcbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbW9zdCByZWxldmFudCBpbnN0YW5jZSBvZiBHZW5pZU9iamVjdCBpbiB0aGlzIGNvbnRleHRcbiAgICogQHJldHVybnMge2FueX0gdGhlIEdlbmllT2JqZWN0XG4gICAqL1xuICBmdW5jdGlvbiBDdXJyZW50KCkge1xuICAgIGNvbnN0IGN1cnJlbnRDbGFzc05hbWUgPSB0YXJnZXQuQ2xhc3NEZXNjcmlwdG9yLmNsYXNzTmFtZTtcbiAgICBjb25zdCBpbnRlcmZhY2VTbmFwc2hvdCA9IFJldHJpZXZlSW50ZXJmYWNlc1NuYXBzaG90KCk7XG4gICAgY29uc3QgZ2VuaWVJbnRlcmZhY2VzID0gaW50ZXJmYWNlU25hcHNob3QuaW50ZXJmYWNlcztcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbQ3VycmVudF0gc3RhcnQgJHtjdXJyZW50Q2xhc3NOYW1lfTsgdmlzaWJsZUludGVyZmFjZXM9JHtnZW5pZUludGVyZmFjZXMubGVuZ3RofTsgdGFwcz0ke0NsaWNrUG9pbnRzLmxlbmd0aH1gLFxuICAgICk7XG4gICAgaWYgKGludGVyZmFjZVNuYXBzaG90LnZpc2liaWxpdHlTdGF0ZSA9PT0gXCJ0cmFuc2l0aW9uX3Vuc3RhYmxlXCIpIHtcbiAgICAgIHRocm93IG5ldyBDdXJyZW50Q29udGV4dEVycm9yKFxuICAgICAgICBgVmlzaWJsZSAke2N1cnJlbnRDbGFzc05hbWV9IGNvbnRleHQgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUgd2hpbGUgbmF2aWdhdGlvbiBpcyB0cmFuc2l0aW9uaW5nLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50SW50ZXJmYWNlID0gcGlja0N1cnJlbnRJbnRlcmZhY2UoXG4gICAgICBjdXJyZW50Q2xhc3NOYW1lLFxuICAgICAgZ2VuaWVJbnRlcmZhY2VzLFxuICAgICAgQ2xpY2tQb2ludHMsXG4gICAgICB7XG4gICAgICAgIGJsb2NrZWRSZWN0czogQ3VycmVudFNlbGVjdGlvbkJsb2NrZWRSZWN0cyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbQ3VycmVudF0gcmVzb2x2ZWQgJHtjdXJyZW50Q2xhc3NOYW1lfSAtPiAke2N1cnJlbnRJbnRlcmZhY2UuY2xhc3NOYW1lfSAke0pTT04uc3RyaW5naWZ5KGN1cnJlbnRJbnRlcmZhY2Uua2V5KX1gLFxuICAgICk7XG4gICAgcmV0dXJuIEluc3RhbnRpYXRlR2VuaWVPYmplY3QoY3VycmVudEludGVyZmFjZSk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIHRhcmdldC5DdXJyZW50ID0gQ3VycmVudDtcblxuICAvLyBhcHBlbmQgYWRkaXRpb25hbCBmdW5jdGlvbiBkZXNjcmlwdG9yIHRvIGNsYXNzIGRlc2NyaXB0b3JcbiAgdXBzZXJ0RnVuY3Rpb25EZXNjcmlwdG9yKFxuICAgIHRhcmdldC5DbGFzc0Rlc2NyaXB0b3IuZnVuY3Rpb25zIGFzIHVua25vd24gYXMgU2V0PGFueT4sXG4gICAgbmV3IEZ1bmNEZXNjcmlwdG9yKFxuICAgICAgICBcIkN1cnJlbnRcIixcbiAgICAgICAgW10sXG4gICAgICAgIHRhcmdldC5DbGFzc0Rlc2NyaXB0b3IuY2xhc3NOYW1lLFxuICAgICAgICB0cnVlLFxuICAgICAgICBcIlRoZSBzaW5nbGUgb2JqZWN0IHRoYXQgdGhlIHVzZXIgaXMgcmVmZXJyaW5nIHRvLiBVc3VhbGx5IGVpdGhlciB0aGUgb2JqZWN0IHRoYXQgaXMgY2xvc2VzdCB0byB0aGUgbW91c2UgY2xpY2ssIG9yIHRoZSBvYmplY3QgdGhhdCBpcyB0aGUgbGFyZ2VzdCBvbiBzY3JlZW4uXCIsXG4gICAgICApLFxuICApO1xuXG4gIGZ1bmN0aW9uIEFsbEN1cnJlbnQoKSB7XG4gICAgY29uc3QgY3VycmVudENsYXNzTmFtZSA9IHRhcmdldC5DbGFzc0Rlc2NyaXB0b3IuY2xhc3NOYW1lO1xuICAgIGNvbnN0IGludGVyZmFjZVNuYXBzaG90ID0gUmV0cmlldmVJbnRlcmZhY2VzU25hcHNob3QoKTtcbiAgICBjb25zdCBnZW5pZUludGVyZmFjZXMgPSBpbnRlcmZhY2VTbmFwc2hvdC5pbnRlcmZhY2VzO1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBnZW5pZUludGVyZmFjZXMuZmlsdGVyKFxuICAgICAgKGdlbmllSW50ZXJmYWNlKSA9PiBnZW5pZUludGVyZmFjZS5jbGFzc05hbWUgPT09IGN1cnJlbnRDbGFzc05hbWUsXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbQWxsQ3VycmVudF0gc3RhcnQgJHtjdXJyZW50Q2xhc3NOYW1lfTsgdmlzaWJsZUludGVyZmFjZXM9JHtnZW5pZUludGVyZmFjZXMubGVuZ3RofTsgY2FuZGlkYXRlcz0ke2NhbmRpZGF0ZXMubGVuZ3RofTsgdGFwcz0ke0NsaWNrUG9pbnRzLmxlbmd0aH1gLFxuICAgICk7XG5cbiAgICBjb25zdCBvYmplY3RzOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2JqZWN0cztcbiAgICB9XG5cbiAgICBpZiAoQ2xpY2tQb2ludHMubGVuZ3RoID4gMSkge1xuICAgICAgZm9yIChjb25zdCBjbGlja1BvaW50IG9mIENsaWNrUG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IGNsb3Nlc3QgPSBwaWNrTmVhcmVzdEludGVyZmFjZShjYW5kaWRhdGVzLCBjbGlja1BvaW50KTtcbiAgICAgICAgb2JqZWN0cy5wdXNoKEluc3RhbnRpYXRlR2VuaWVPYmplY3QoY2xvc2VzdCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgZ2VuaWVJbnRlcmZhY2Ugb2YgY2FuZGlkYXRlcykge1xuICAgICAgICBvYmplY3RzLnB1c2goSW5zdGFudGlhdGVHZW5pZU9iamVjdChnZW5pZUludGVyZmFjZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdHM7XG4gICAgfVxuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICB0YXJnZXQuQWxsQ3VycmVudCA9IEFsbEN1cnJlbnQ7XG5cbiAgLy8gYXBwZW5kIGFkZGl0aW9uYWwgZnVuY3Rpb24gZGVzY3JpcHRvciB0byBjbGFzcyBkZXNjcmlwdG9yXG4gIHVwc2VydEZ1bmN0aW9uRGVzY3JpcHRvcihcbiAgICB0YXJnZXQuQ2xhc3NEZXNjcmlwdG9yLmZ1bmN0aW9ucyBhcyB1bmtub3duIGFzIFNldDxhbnk+LFxuICAgIG5ldyBGdW5jRGVzY3JpcHRvcihcbiAgICAgICAgXCJBbGxDdXJyZW50XCIsXG4gICAgICAgIFtdLFxuICAgICAgICB0YXJnZXQuQ2xhc3NEZXNjcmlwdG9yLmNsYXNzTmFtZSArIFwiW11cIixcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgXCJBbGwgb2JqZWN0cyB0aGF0IHRoZSB1c2VyIGlzIHJlZmVycmluZyB0by4gVXN1YWxseSBlaXRoZXIgdGhlIG9iamVjdHMgdGhhdCBhcmUgY2xvc2VzdCB0byB0aGUgbW91c2UgY2xpY2tzIChpZiBtdWx0aXBsZSksIG9yIGFsbCBvYmplY3RzIG9mIHRoYXQgdHlwZSBvbiBzY3JlZWVuLlwiLFxuICAgICAgKSxcbiAgKTtcblxuICBnZW5pZURpc3BhdGNoKCgpID0+IHtcbiAgICBjb25zdCBuZXdFeGFtcGxlcyA9IG1lcmdlVW5pcXVlRXhhbXBsZXMoXG4gICAgICBzaGFyZWRTdGF0ZVtcIl9fRVhBTVBMRVNfX1wiXSB8fCBbXSxcbiAgICAgIHRhcmdldC5FeGFtcGxlcyB8fCBbXSxcbiAgICApO1xuICAgIHNldFNoYXJlZFN0YXRlKHtcbiAgICAgIC4uLnNoYXJlZFN0YXRlLFxuICAgICAgW1wiX19FWEFNUExFU19fXCJdOiBuZXdFeGFtcGxlcyxcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdFJlYWN0R2VuaWUoKTogU3RvcmU8YW55LCBhbnk+IHtcbiAgY29uc3QgcmVhY3RHZW5pZVN0b3JlID0gaW5pdEdlbmllKHtcbiAgICBpbml0R2VuaWVDbGFzc01vZGlmaWVyOiByZWFjdEdlbmllQ2xhc3NNb2RpZmllcixcbiAgfSk7XG4gIGdlbmllRGlzcGF0Y2goKCkgPT4ge1xuICAgIGNvbnN0IHJlYWN0R2VuaWVTdGF0ZSA9IHNoYXJlZFN0YXRlIGFzIFJlYWN0R2VuaWVTdGF0ZTtcbiAgICByZWFjdEdlbmllU3RhdGUubmF2U3RhdGUgPSB7XG4gICAgICBvYmplY3RWaWV3Q2xhc3NOYW1lOiBudWxsLFxuICAgICAgb2JqZWN0Q29uc3RydWN0b3JQYXJhbXM6IG51bGwsXG4gICAgICBxdWVyeUludGVudDogbnVsbCxcbiAgICAgIHJlc3VsdFJlZjogbnVsbCxcbiAgICAgIHJlc3VsdE9iamVjdFR5cGU6IG51bGwsXG4gICAgfTtcbiAgICByZWFjdEdlbmllU3RhdGUubmF2U3RhY2sgPSAwO1xuICAgIHJlYWN0R2VuaWVTdGF0ZS5tZXNzYWdlID0ge1xuICAgICAgbWluaW1hbFRleHQ6IFwiXCIsXG4gICAgICBmdWxsVGV4dDogXCJcIixcbiAgICAgIHR5cGU6IFwiaW5mb1wiLFxuICAgICAgc2hvdWxkU3BlYWs6IGZhbHNlLFxuICAgICAgb3JpZ2luOiBcInN5c3RlbVwiLFxuICAgICAgbWVzc2FnZTogXCJcIixcbiAgICB9O1xuICAgIHJlYWN0R2VuaWVTdGF0ZS5yZXN1bHRXaW5kb3dCeVJlZiA9IHt9O1xuICAgIHJlYWN0R2VuaWVTdGF0ZS5yZXN1bHRXaW5kb3dPcmRlciA9IFtdO1xuICAgIHJlYWN0R2VuaWVTdGF0ZS5yZXN1bHRXaW5kb3dNYXggPSA0MDtcbiAgICByZWFjdEdlbmllU3RhdGUucmVzdWx0V2luZG93VHRsTXMgPSA1ICogNjAgKiAxMDAwO1xuICAgIHJlYWN0R2VuaWVTdGF0ZS5yZXN1bHRXaW5kb3dTZXF1ZW5jZSA9IDA7XG4gIH0pO1xuICByZXR1cm4gcmVhY3RHZW5pZVN0b3JlO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gdHlwZSB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGJlaW5nIHJlbmRlcmVkIGJ5IHRoZSBpbnRlcmZhY2VcbiAqIEBwYXJhbSBkaXNwbGF5VGl0bGUgdGhlIHRpdGxlIG9mIHRoZSBpbnRlcmZhY2UsIGNhbiBiZSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaW4gdGhlIG9iamVjdCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICogQHBhcmFtIGRpc3BsYXlQcmlvcml0eSB0aGUgcHJpb3JpdHkgb2YgdGhlIGludGVyZmFjZSwgY2FuIGJlIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBpbiB0aGUgb2JqZWN0IGFuZCByZXR1cm5zIGEgbnVtYmVyXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEdlbmllQ2xhc3NJbnRlcmZhY2UoXG4gIHR5cGU6IHN0cmluZyxcbiAgZGlzcGxheVRpdGxlOiBzdHJpbmcgfCAoKGFueSkgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgZGlzcGxheVByaW9yaXR5OiBudW1iZXIgfCAoKHRhcmdldDogYW55KSA9PiBudW1iZXIpID0gMCxcbikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogYW55KSB7XG4gICAgLy8gY3JlYXRlIGEgZnVuY3Rpb24gd2l0aCBhIGxpc3Qgb2YgcGFyYW1ldGVyc1xuICAgIGNvbnN0IG5ld1RhcmdldCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICByZXR1cm4gR2VuaWVWaWV3V3JhcHBlcih0eXBlLCB0YXJnZXQsIGFyZ3MpKCk7XG4gICAgfTtcbiAgICBpZiAoZGlzcGxheVRpdGxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRpc3BsYXlUaXRsZSA9IHR5cGU7XG4gICAgfVxuICAgIGNvbnN0IHRpdGxlRnVuY3Rpb24gPVxuICAgICAgdHlwZW9mIGRpc3BsYXlUaXRsZSA9PT0gXCJzdHJpbmdcIiA/ICgpID0+IGRpc3BsYXlUaXRsZSA6IGRpc3BsYXlUaXRsZTtcbiAgICBjb25zdCBkaXNwbGF5UHJpb3JpdHlGdW5jdGlvbiA9XG4gICAgICB0eXBlb2YgZGlzcGxheVByaW9yaXR5ID09PSBcIm51bWJlclwiXG4gICAgICAgID8gKCkgPT4gZGlzcGxheVByaW9yaXR5XG4gICAgICAgIDogZGlzcGxheVByaW9yaXR5O1xuICAgIGNvbnN0IG5ld0dlbmllSW50ZXJmYWNlU3BlYzogR2VuaWVJbnRlcmZhY2VTdG9yZUVsZW1lbnQgPSB7XG4gICAgICBvYmplY3RDbGFzc05hbWU6IHR5cGUsXG4gICAgICB2aWV3Q2xhc3NOYW1lOiB0YXJnZXQubmFtZSxcbiAgICAgIHRpdGxlOiB0aXRsZUZ1bmN0aW9uIGFzIChhbnk6IGFueSkgPT4gc3RyaW5nLFxuICAgICAgZnVuY3Rpb246IG5ld1RhcmdldCxcbiAgICAgIGRpc3BsYXlQcmlvcml0eTogZGlzcGxheVByaW9yaXR5RnVuY3Rpb24sXG4gICAgfTtcbiAgICBBbGxHZW5pZU9iamVjdEludGVyZmFjZXMuYWRkSW50ZXJmYWNlKG5ld0dlbmllSW50ZXJmYWNlU3BlYyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogTm90ZTogQXV0b21hdGljIHJvdXRlIHJlZ2lzdHJhdGlvbiBiYXNlZCBvbiBjb252ZW50aW9uIChvcHRpb25hbCwgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZXhwbGljaXQgcmVnaXN0cmF0aW9uIGluIGNvbXBvbmVudHMpIFxuICAgICAqIC0gZm9yIGV4YW1wbGUsIHdlIGNhbiBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyIGFuIGludGVyZmFjZSBmb3IgYSBHZW5pZU9iamVjdCBjbGFzcyBuYW1lZCBcIkVtYWlsXCIgd2l0aCBhIGNvbXBvbmVudCBuYW1lZCBcIkVtYWlsSW50ZXJmYWNlXCIuIFRoaXMgYWxsb3dzIGZvciBtb3JlIHNlYW1sZXNzIGludGVncmF0aW9uIG9mIG5ldyBjb21wb25lbnRzIGFuZCBpbnRlcmZhY2VzIHdpdGhvdXQgbmVlZGluZyB0byB3b3JyeSBhYm91dCByZWdpc3RyYXRpb24gb3JkZXIuIFxuICAgICAqIEhvd2V2ZXIsIGV4cGxpY2l0IHJlZ2lzdHJhdGlvbiBpcyBzdGlsbCBzdXBwb3J0ZWQgYW5kIGNhbiBiZSB1c2VkIGluc3RlYWQgaWYgZGVzaXJlZC5cbiAgICAgKiBXZSBjYW4gaGF2ZSBtdWx0aXBsZSBpbnRlcmZhY2VzIGZvciB0aGUgc2FtZSBvYmplY3QgdHlwZSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHJlZ2lzdHJhdGlvbiBvcmRlci5cbiAgICAgKi8gXG5cbiAgICAvLyBhZGQgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggY29udGFpbnMgd2hldGhlciB0aGUgZWxlbWVudCBpcyBvbi9vZmYgc2NyZWVuXG4gICAgcmV0dXJuIFJlYWN0Lm1lbW8obmV3VGFyZ2V0KTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxpQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsY0FBQSxHQUFBRixPQUFBO0FBdUNBLElBQUFHLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUdBLElBQUFLLGlCQUFBLEdBQUFMLE9BQUE7QUFLQSxJQUFBTSxpQkFBQSxHQUFBTixPQUFBO0FBRzZCLFNBQUFJLHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQUcsUUFBQUgsQ0FBQSxFQUFBSSxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFQLENBQUEsT0FBQU0sTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQVIsQ0FBQSxHQUFBSSxDQUFBLEtBQUFLLENB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
@@ -288,13 +288,13 @@ const convertGenieClassToState = obj => {
288
288
  if (obj.constructor.prototype instanceof _reactgenieDsl.DataClass) {
289
289
  return _objectSpread({
290
290
  __genieObjectType: "DataClass",
291
- __genieObjectClass: obj.constructor.name,
291
+ __genieObjectClass: (0, _reactDecorators.getStableGenieObjectClassName)(obj),
292
292
  __genieObjectKey: obj[obj.genieKey]
293
293
  }, obj.__getState());
294
294
  } else if (obj.constructor.prototype instanceof _reactgenieDsl.HelperClass) {
295
295
  return _objectSpread({
296
296
  __genieObjectType: "HelperClass",
297
- __genieObjectClass: obj.constructor.name
297
+ __genieObjectClass: (0, _reactDecorators.getStableGenieObjectClassName)(obj)
298
298
  }, obj.localStore);
299
299
  }
300
300
  throw new Error("Unknown GenieObject type");
@@ -512,7 +512,8 @@ function displayResult(executionResult, transcript, parsed, genieInterfaces) {
512
512
  onScreen = false;
513
513
  } else {
514
514
  // check if displayingObjects is on screen already
515
- const targetInterface = genieInterfaces.find(genieInterface => genieInterface.className === Instance.constructor.name && (0, _reactRedux.shallowEqual)(genieInterface.key, Instance._getConstructorParams()));
515
+ const instanceClassName = (0, _reactDecorators.getStableGenieObjectClassName)(Instance);
516
+ const targetInterface = genieInterfaces.find(genieInterface => genieInterface.className === instanceClassName && (0, _reactRedux.shallowEqual)(genieInterface.key, Instance._getConstructorParams()));
516
517
  if (!targetInterface) {
517
518
  onScreen = false;
518
519
  }
@@ -546,8 +547,12 @@ function displayResult(executionResult, transcript, parsed, genieInterfaces) {
546
547
  }
547
548
  }
548
549
  if (!onScreen && !cannotdisplay) {
550
+ const targetInterface = _reactDecorators.AllGenieObjectInterfaces.getInterfaces(instantiatedDisplayingObject);
551
+ if (!targetInterface) {
552
+ throw new Error(`No registered Genie interface found for object type "${(0, _reactDecorators.getStableGenieObjectClassName)(instantiatedDisplayingObject) ?? "unknown"}".`);
553
+ }
549
554
  reactGenieState.navState = {
550
- objectViewClassName: _reactDecorators.AllGenieObjectInterfaces.getInterfaces(instantiatedDisplayingObject).viewClassName,
555
+ objectViewClassName: targetInterface.viewClassName,
551
556
  objectConstructorParams: allDisplayingObjects.length === 1 ? allDisplayingObjects[0].value._getConstructorParams() : {
552
557
  elements: allDisplayingObjects.map(displayingObject => displayingObject.value._getConstructorParams())
553
558
  },
@@ -586,4 +591,4 @@ function resetGenieNavigation() {
586
591
  };
587
592
  });
588
593
  }
589
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9kYWxpdHlQcm92aWRlclYiLCJyZXF1aXJlIiwiX3JlYWN0RGVjb3JhdG9ycyIsIl9yZWFjdFJlZHV4IiwiX3JlYWN0Z2VuaWVEc2wiLCJfbG9nZ2VyIiwiX2Vycm9ycyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwidWlBY3RpdmUiLCJleHBvcnRzIiwiREVGQVVMVF9SRVNVTFRfV0lORE9XX01BWCIsIkRFRkFVTFRfUkVTVUxUX1dJTkRPV19UVExfTVMiLCJnZXRDb25zdHJ1Y3RvclBhcmFtc0Zyb21SZXN1bHRWYWx1ZSIsIl9nZXRDb25zdHJ1Y3RvclBhcmFtcyIsImRlZXBGcmVlemVPYmplY3QiLCJmcmVlemUiLCJrZXkiLCJuZXN0ZWQiLCJpc0Zyb3plbiIsImNsb25lRGV0YWNoZWRWYWx1ZSIsIm5hdGl2ZVN0cnVjdHVyZWRDbG9uZSIsImdsb2JhbFRoaXMiLCJzdHJ1Y3R1cmVkQ2xvbmUiLCJjbG9uZWQiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJlcnJvciIsImxvZ2dlciIsIndhcm4iLCJjcmVhdGVJbW11dGFibGVDb25zdHJ1Y3RvclBhcmFtc1NuYXBzaG90IiwiY29uc3RydWN0b3JQYXJhbXMiLCJzbmFwc2hvdCIsImVuc3VyZVJlc3VsdFdpbmRvd0RlZmF1bHRzIiwic3RhdGUiLCJyZXN1bHRXaW5kb3dCeVJlZiIsInJlc3VsdFdpbmRvd09yZGVyIiwicmVzdWx0V2luZG93TWF4IiwicmVzdWx0V2luZG93VHRsTXMiLCJpc0Zpbml0ZSIsInJlc3VsdFdpbmRvd1NlcXVlbmNlIiwicHJ1bmVSZXN1bHRXaW5kb3ciLCJub3ciLCJEYXRlIiwibWluQ3JlYXRlZEF0IiwicmVzdWx0UmVmIiwiZW50cnkiLCJjcmVhdGVkQXQiLCJvbGRlc3RSZWYiLCJzaGlmdCIsInB1dFJlc3VsdFdpbmRvd0VudHJ5IiwiZXZlbnRJZCIsImNvbXBsZXRlRW50cnkiLCJoYXNoU3RyaW5nIiwiaGFzaCIsImNoYXJDb2RlQXQiLCJNYXRoIiwiYWJzIiwidG9TdHJpbmciLCJhY2Nlc3NvckZpZWxkVG9QYXRoIiwiZmllbGQiLCJ0eXBlIiwicGFyZW50IiwiYWNjZXNzIiwiYXN0VmFsdWVUb1ByaW1pdGl2ZSIsImFzdCIsInVuZGVmaW5lZCIsIm9iamVjdFR5cGUiLCJjb2xsZWN0RnVuY3Rpb25DYWxscyIsImNhbGxzIiwiZnVuY19uYW1lIiwicGFyYW1ldGVycyIsInBhcmFtZXRlciIsImluZGV4IiwiZ2V0Q2FsbFBhcmFtIiwicGFyYW1OYW1lIiwiQXJyYXkiLCJpc0FycmF5IiwiZmluZCIsInBhcmFtIiwiZXh0cmFjdFF1ZXJ5SW50ZW50RnJvbUFzdCIsInJldmVyc2UiLCJvcHMiLCJmdW5jTmFtZSIsImZpZWxkQXN0IiwidmFsdWVBc3QiLCJmaWVsZFBhdGgiLCJraW5kIiwiZnJvbSIsInRvIiwiYXNjZW5kaW5nIiwiQm9vbGVhbiIsInNlcmlhbGl6ZWQiLCJ1c2VHZW5pZUNvZGVTZWxlY3RvciIsImNvbW1hbmQiLCJzZXRTaGFyZWRTdGF0ZSIsInJlc3VsdCIsIkdlbmllSW50ZXJwcmV0ZXIiLCJkc2xJbnRlcnByZXRlciIsImludGVycHJldCIsInNoYWxsb3dFcXVhbFdpdGhBcnJheSIsImxlZnQiLCJyaWdodCIsInNoYWxsb3dFcXVhbCIsImNvbnZlcnRHZW5pZUNsYXNzVG9TdGF0ZSIsIm9iaiIsIm1hcCIsImVsZW1lbnQiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIkdlbmllT2JqZWN0IiwiRGF0YUNsYXNzIiwiX19nZW5pZU9iamVjdFR5cGUiLCJfX2dlbmllT2JqZWN0Q2xhc3MiLCJuYW1lIiwiX19nZW5pZU9iamVjdEtleSIsImdlbmllS2V5IiwiX19nZXRTdGF0ZSIsIkhlbHBlckNsYXNzIiwibG9jYWxTdG9yZSIsIkVycm9yIiwidXNlR2VuaWVTZWxlY3RvciIsInNlbGVjdG9yIiwic2VsZWN0b3JSZXN1bHQiLCJ1c2VTZWxlY3RvciIsIlJFU1VMVF9QUkVWSUVXX01BWF9MRU5HVEgiLCJ0cnVuY2F0ZVRleHQiLCJtYXhMZW5ndGgiLCJzbGljZSIsIm1heCIsInRyaW1FbmQiLCJjcmVhdGVTeXN0ZW1NZXNzYWdlIiwibWluaW1hbFRleHQiLCJmdWxsVGV4dCIsInNob3VsZFNwZWFrIiwib3JpZ2luIiwibWVzc2FnZSIsImNyZWF0ZVVzZXJGYWNpbmdNZXNzYWdlIiwic2hvdWxkU3BlYWtCeURlZmF1bHQiLCJzYWZlU2VyaWFsaXplVmFsdWUiLCJidWlsZFJlc3VsdERpZ2VzdCIsInBhcnNlZCIsInN0YXR1cyIsInJlc3VsdFR5cGUiLCJ2YWx1ZXMiLCJmaXJzdCIsImZpcnN0T2JqZWN0VHlwZSIsImZpcnN0UHJldmlldyIsImNvdW50IiwicHJldmlldyIsImV4ZWN1dGVHZW5pZUNvZGUiLCJvcHRpb25zIiwic2FuaXRpemVkIiwidHJpbSIsIm1lc3NhZ2VPcmlnaW4iLCJzaG91bGRTcGVha0Vycm9ycyIsImdlbmllRGlzcGF0Y2giLCJyZWFjdEdlbmllU3RhdGUiLCJzaGFyZWRTdGF0ZSIsInN1Y2Nlc3MiLCJyZXN1bHRzIiwiaW50ZXJwcmV0U3RlcHMiLCJpc0dlbmllVXNlckZhY2luZ0Vycm9yIiwiZGlzcGxheVJlc3VsdCIsImV4ZWN1dGlvblJlc3VsdCIsInRyYW5zY3JpcHQiLCJnZW5pZUludGVyZmFjZXMiLCJhbGxEaXNwbGF5aW5nT2JqZWN0cyIsImRpc3BsYXlpbmdPYmplY3QiLCJkaXNwbGF5aW5nT2JqZWN0VHlwZSIsInN0YXRlbWVudFJlc3VsdCIsInN0YXRlbWVudEFzdCIsInJlc3VsdFN0ZXBzIiwicXVlcnlJbnRlbnQiLCJsYXN0UmVzdWx0Iiwic3RlcCIsInN0ZXBSZXN1bHQiLCJwcmltYXJ5VmFsdWUiLCJoYXNPd24iLCJBbGxHZW5pZU9iamVjdEludGVyZmFjZXMiLCJzdXBwb3J0ZWRUeXBlcyIsImhhcyIsImNhbm5vdGRpc3BsYXkiLCJvblNjcmVlbiIsImluc3RhbnRpYXRlZERpc3BsYXlpbmdPYmplY3QiLCJJbnN0YW5jZSIsIkluc3RhbnRpYXRlR2VuaWVPYmplY3QiLCJjbGFzc05hbWUiLCJ0YXJnZXRJbnRlcmZhY2UiLCJnZW5pZUludGVyZmFjZSIsIm5sUGFyc2VyIiwicmVzcG9uZCIsInRoZW4iLCJjb25zb2xlIiwibG9nIiwicmVzdWx0RW50cnkiLCJvcmRlcmVkQ29uc3RydWN0b3JQYXJhbXMiLCJwYXJhbXMiLCJwcmVkaWN0ZWRFdmVudElkIiwibmF2U3RhY2siLCJyZXN1bHRPYmplY3RUeXBlIiwibmF2U3RhdGUiLCJvYmplY3RWaWV3Q2xhc3NOYW1lIiwiZ2V0SW50ZXJmYWNlcyIsInZpZXdDbGFzc05hbWUiLCJvYmplY3RDb25zdHJ1Y3RvclBhcmFtcyIsImVsZW1lbnRzIiwiY2F0Y2giLCJyZXNldEdlbmllTmF2aWdhdGlvbiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9zaGFyZWQtc3RvcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VuaWVJbnRlcnByZXRlciB9IGZyb20gXCIuL21vZGFsaXR5LXByb3ZpZGVyLXYyXCI7XG5pbXBvcnQge1xuICBBbGxHZW5pZU9iamVjdEludGVyZmFjZXMsXG4gIEdlbmllSW50ZXJmYWNlU3BlYyxcbiAgSW5zdGFudGlhdGVHZW5pZU9iamVjdCxcbn0gZnJvbSBcIi4vcmVhY3QtZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgc2hhbGxvd0VxdWFsLCB1c2VTZWxlY3RvciB9IGZyb20gXCJyZWFjdC1yZWR1eFwiO1xuaW1wb3J0IHtcbiAgRGF0YUNsYXNzLFxuICBHZW5pZU9iamVjdCxcbiAgSGVscGVyQ2xhc3MsXG4gIHNldFNoYXJlZFN0YXRlLFxufSBmcm9tIFwiQGdhcnJpeDgyL3JlYWN0Z2VuaWUtZHNsXCI7XG5pbXBvcnQgeyBnZW5pZURpc3BhdGNoLCBzaGFyZWRTdGF0ZSB9IGZyb20gXCJAZ2Fycml4ODIvcmVhY3RnZW5pZS1kc2xcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuaW1wb3J0IHsgR2VuaWVVc2VyRmFjaW5nRXJyb3IsIGlzR2VuaWVVc2VyRmFjaW5nRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcblxuZXhwb3J0IHR5cGUgUmVhY3RHZW5pZVN0YXRlID0ge1xuICBtZXNzYWdlOiBSZWFjdEdlbmllTWVzc2FnZTtcbiAgbmF2U3RhdGU6IE5hdmlnYXRvclN0YXRlO1xuICBuYXZTdGFjazogbnVtYmVyO1xuICByZXN1bHRXaW5kb3dCeVJlZjogUmVjb3JkPHN0cmluZywgUmVzdWx0V2luZG93RW50cnk+O1xuICByZXN1bHRXaW5kb3dPcmRlcjogc3RyaW5nW107XG4gIHJlc3VsdFdpbmRvd01heDogbnVtYmVyO1xuICByZXN1bHRXaW5kb3dUdGxNczogbnVtYmVyO1xuICByZXN1bHRXaW5kb3dTZXF1ZW5jZTogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgUmVhY3RHZW5pZU1lc3NhZ2UgPSBBZ2VudFJlc3BvbnNlUGF5bG9hZCAmIHtcbiAgb3JpZ2luOiBcInZvaWNlXCIgfCBcInN5c3RlbVwiO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlJbnRlbnRPcGVyYXRpb24gPVxuICB8IHtcbiAgICAgIGtpbmQ6IFwibWF0Y2hpbmdcIiB8IFwiY29udGFpbnNcIiB8IFwiZXF1YWxzXCI7XG4gICAgICBmaWVsZDogc3RyaW5nO1xuICAgICAgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG4gICAgfVxuICB8IHtcbiAgICAgIGtpbmQ6IFwiYmV0d2VlblwiO1xuICAgICAgZmllbGQ6IHN0cmluZztcbiAgICAgIGZyb20/OiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuICAgICAgdG8/OiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuICAgIH1cbiAgfCB7XG4gICAgICBraW5kOiBcInNvcnRcIjtcbiAgICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgICBhc2NlbmRpbmc6IGJvb2xlYW47XG4gICAgfVxuICB8IHtcbiAgICAgIGtpbmQ6IFwiaW5kZXhcIjtcbiAgICAgIHZhbHVlOiBudW1iZXI7XG4gICAgfVxuICB8IHtcbiAgICAgIGtpbmQ6IFwibGVuZ3RoXCI7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgUXVlcnlJbnRlbnQgPSB7XG4gIG9wczogUXVlcnlJbnRlbnRPcGVyYXRpb25bXTtcbiAgaGFzaDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUmVzdWx0V2luZG93RW50cnkgPSB7XG4gIHJlc3VsdFJlZjogc3RyaW5nO1xuICBldmVudElkOiBudW1iZXI7XG4gIHJlc3VsdE9iamVjdFR5cGU6IHN0cmluZztcbiAgb3JkZXJlZENvbnN0cnVjdG9yUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xufTtcblxudHlwZSBBZ2VudFJlc3BvbnNlUGF5bG9hZCA9IHtcbiAgbWluaW1hbFRleHQ6IHN0cmluZztcbiAgZnVsbFRleHQ6IHN0cmluZztcbiAgdHlwZTogXCJpbmZvXCIgfCBcImVycm9yXCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiO1xuICBzaG91bGRTcGVhazogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBsZXQgdWlBY3RpdmUgPSB0cnVlO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRvclN0YXRlIHtcbiAgb2JqZWN0Vmlld0NsYXNzTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgb2JqZWN0Q29uc3RydWN0b3JQYXJhbXM6IGFueTtcbiAgcXVlcnlJbnRlbnQ/OiBRdWVyeUludGVudCB8IG51bGw7XG4gIHJlc3VsdFJlZj86IHN0cmluZyB8IG51bGw7XG4gIHJlc3VsdE9iamVjdFR5cGU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5jb25zdCBERUZBVUxUX1JFU1VMVF9XSU5ET1dfTUFYID0gNDA7XG5jb25zdCBERUZBVUxUX1JFU1VMVF9XSU5ET1dfVFRMX01TID0gNSAqIDYwICogMTAwMDtcblxuZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JQYXJhbXNGcm9tUmVzdWx0VmFsdWUodmFsdWU6IGFueSk6IGFueSB8IG51bGwge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZS5fZ2V0Q29uc3RydWN0b3JQYXJhbXMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB2YWx1ZS5fZ2V0Q29uc3RydWN0b3JQYXJhbXMoKTtcbn1cblxuZnVuY3Rpb24gZGVlcEZyZWV6ZU9iamVjdDxUPih2YWx1ZTogVCk6IFQge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBPYmplY3QuZnJlZXplKHZhbHVlKTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUgYXMgYW55KSkge1xuICAgIGNvbnN0IG5lc3RlZCA9ICh2YWx1ZSBhcyBhbnkpW2tleV07XG4gICAgaWYgKG5lc3RlZCAmJiB0eXBlb2YgbmVzdGVkID09PSBcIm9iamVjdFwiICYmICFPYmplY3QuaXNGcm96ZW4obmVzdGVkKSkge1xuICAgICAgZGVlcEZyZWV6ZU9iamVjdChuZXN0ZWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNsb25lRGV0YWNoZWRWYWx1ZTxUPih2YWx1ZTogVCk6IFQgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuYXRpdmVTdHJ1Y3R1cmVkQ2xvbmUgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpLnN0cnVjdHVyZWRDbG9uZTtcbiAgICBjb25zdCBjbG9uZWQgPVxuICAgICAgdHlwZW9mIG5hdGl2ZVN0cnVjdHVyZWRDbG9uZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gbmF0aXZlU3RydWN0dXJlZENsb25lKHZhbHVlKVxuICAgICAgICA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICByZXR1cm4gZGVlcEZyZWV6ZU9iamVjdChjbG9uZWQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgXCJbUmVhY3RHZW5pZV0gVW5hYmxlIHRvIGNsb25lIGNvbnN0cnVjdG9yIHBhcmFtcyBmb3IgcmVzdWx0IHdpbmRvdyBzbmFwc2hvdFwiLFxuICAgICAgZXJyb3IsXG4gICAgKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW1tdXRhYmxlQ29uc3RydWN0b3JQYXJhbXNTbmFwc2hvdChcbiAgdmFsdWU6IGFueSxcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsIHtcbiAgY29uc3QgY29uc3RydWN0b3JQYXJhbXMgPSBnZXRDb25zdHJ1Y3RvclBhcmFtc0Zyb21SZXN1bHRWYWx1ZSh2YWx1ZSk7XG4gIGlmICghY29uc3RydWN0b3JQYXJhbXMgfHwgdHlwZW9mIGNvbnN0cnVjdG9yUGFyYW1zICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgc25hcHNob3QgPSBjbG9uZURldGFjaGVkVmFsdWUoY29uc3RydWN0b3JQYXJhbXMpO1xuICBpZiAoIXNuYXBzaG90IHx8IHR5cGVvZiBzbmFwc2hvdCAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBzbmFwc2hvdCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVSZXN1bHRXaW5kb3dEZWZhdWx0cyhzdGF0ZTogUmVhY3RHZW5pZVN0YXRlKSB7XG4gIC8vIGBnZW5pZURpc3BhdGNoYCBzdGFydHMgZnJvbSBhIHNoYWxsb3cgY29weSBvZiB0aGUgcHJldmlvdXMgc3RhdGUuXG4gIC8vIENsb25lIG11dGFibGUgcmVzdWx0LXdpbmRvdyBjb250YWluZXJzIGJlZm9yZSB3cml0ZXMgc28gd2UgZG9uJ3QgbXV0YXRlXG4gIC8vIHJlZmVyZW5jZXMgZnJvbSB0aGUgcHJldmlvdXMgUmVkdXggc3RhdGUgc25hcHNob3QuXG4gIHN0YXRlLnJlc3VsdFdpbmRvd0J5UmVmID0gc3RhdGUucmVzdWx0V2luZG93QnlSZWZcbiAgICA/IHsgLi4uc3RhdGUucmVzdWx0V2luZG93QnlSZWYgfVxuICAgIDoge307XG4gIHN0YXRlLnJlc3VsdFdpbmRvd09yZGVyID0gc3RhdGUucmVzdWx0V2luZG93T3JkZXJcbiAgICA/IFsuLi5zdGF0ZS5yZXN1bHRXaW5kb3dPcmRlcl1cbiAgICA6IFtdO1xuICBpZiAoIXN0YXRlLnJlc3VsdFdpbmRvd01heCB8fCBzdGF0ZS5yZXN1bHRXaW5kb3dNYXggPD0gMCkge1xuICAgIHN0YXRlLnJlc3VsdFdpbmRvd01heCA9IERFRkFVTFRfUkVTVUxUX1dJTkRPV19NQVg7XG4gIH1cbiAgaWYgKCFzdGF0ZS5yZXN1bHRXaW5kb3dUdGxNcyB8fCBzdGF0ZS5yZXN1bHRXaW5kb3dUdGxNcyA8PSAwKSB7XG4gICAgc3RhdGUucmVzdWx0V2luZG93VHRsTXMgPSBERUZBVUxUX1JFU1VMVF9XSU5ET1dfVFRMX01TO1xuICB9XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHN0YXRlLnJlc3VsdFdpbmRvd1NlcXVlbmNlKSkge1xuICAgIHN0YXRlLnJlc3VsdFdpbmRvd1NlcXVlbmNlID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcnVuZVJlc3VsdFdpbmRvdyhzdGF0ZTogUmVhY3RHZW5pZVN0YXRlLCBub3cgPSBEYXRlLm5vdygpKSB7XG4gIGVuc3VyZVJlc3VsdFdpbmRvd0RlZmF1bHRzKHN0YXRlKTtcbiAgY29uc3QgbWluQ3JlYXRlZEF0ID0gbm93IC0gc3RhdGUucmVzdWx0V2luZG93VHRsTXM7XG4gIHN0YXRlLnJlc3VsdFdpbmRvd09yZGVyID0gc3RhdGUucmVzdWx0V2luZG93T3JkZXIuZmlsdGVyKChyZXN1bHRSZWYpID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IHN0YXRlLnJlc3VsdFdpbmRvd0J5UmVmW3Jlc3VsdFJlZl07XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZW50cnkuY3JlYXRlZEF0IDwgbWluQ3JlYXRlZEF0KSB7XG4gICAgICBkZWxldGUgc3RhdGUucmVzdWx0V2luZG93QnlSZWZbcmVzdWx0UmVmXTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHdoaWxlIChzdGF0ZS5yZXN1bHRXaW5kb3dPcmRlci5sZW5ndGggPiBzdGF0ZS5yZXN1bHRXaW5kb3dNYXgpIHtcbiAgICBjb25zdCBvbGRlc3RSZWYgPSBzdGF0ZS5yZXN1bHRXaW5kb3dPcmRlci5zaGlmdCgpO1xuICAgIGlmICghb2xkZXN0UmVmKSBicmVhaztcbiAgICBkZWxldGUgc3RhdGUucmVzdWx0V2luZG93QnlSZWZbb2xkZXN0UmVmXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXRSZXN1bHRXaW5kb3dFbnRyeShcbiAgc3RhdGU6IFJlYWN0R2VuaWVTdGF0ZSxcbiAgZW50cnk6IE9taXQ8UmVzdWx0V2luZG93RW50cnksIFwicmVzdWx0UmVmXCIgfCBcImNyZWF0ZWRBdFwiPixcbik6IFJlc3VsdFdpbmRvd0VudHJ5IHtcbiAgZW5zdXJlUmVzdWx0V2luZG93RGVmYXVsdHMoc3RhdGUpO1xuICBzdGF0ZS5yZXN1bHRXaW5kb3dTZXF1ZW5jZSArPSAxO1xuICBjb25zdCByZXN1bHRSZWYgPSBgcmctJHtlbnRyeS5ldmVudElkfS0ke3N0YXRlLnJlc3VsdFdpbmRvd1NlcXVlbmNlfWA7XG4gIGNvbnN0IGNyZWF0ZWRBdCA9IERhdGUubm93KCk7XG4gIGNvbnN0IGNvbXBsZXRlRW50cnk6IFJlc3VsdFdpbmRvd0VudHJ5ID0ge1xuICAgIC4uLmVudHJ5LFxuICAgIHJlc3VsdFJlZixcbiAgICBjcmVhdGVkQXQsXG4gIH07XG4gIHN0YXRlLnJlc3VsdFdpbmRvd0J5UmVmW3Jlc3VsdFJlZl0gPSBjb21wbGV0ZUVudHJ5O1xuICBzdGF0ZS5yZXN1bHRXaW5kb3dPcmRlci5wdXNoKHJlc3VsdFJlZik7XG4gIHBydW5lUmVzdWx0V2luZG93KHN0YXRlLCBjcmVhdGVkQXQpO1xuICByZXR1cm4gY29tcGxldGVFbnRyeTtcbn1cblxuZnVuY3Rpb24gaGFzaFN0cmluZyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGhhc2ggPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgaGFzaCA9IChoYXNoIDw8IDUpIC0gaGFzaCArIHZhbHVlLmNoYXJDb2RlQXQoaSk7XG4gICAgaGFzaCB8PSAwO1xuICB9XG4gIHJldHVybiBNYXRoLmFicyhoYXNoKS50b1N0cmluZygzNik7XG59XG5cbmZ1bmN0aW9uIGFjY2Vzc29yRmllbGRUb1BhdGgoZmllbGQ6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICBpZiAodHlwZW9mIGZpZWxkID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGZpZWxkO1xuICB9XG4gIGlmICghZmllbGQgfHwgdHlwZW9mIGZpZWxkICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09IFwiYWNjZXNzXCIpIHtcbiAgICBjb25zdCBwYXJlbnQgPSBhY2Nlc3NvckZpZWxkVG9QYXRoKGZpZWxkLnBhcmVudCk7XG4gICAgaWYgKCFwYXJlbnQgfHwgdHlwZW9mIGZpZWxkLmFjY2VzcyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBgJHtwYXJlbnR9LiR7ZmllbGQuYWNjZXNzfWA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFzdFZhbHVlVG9QcmltaXRpdmUoYXN0OiBhbnkpOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFhc3QgfHwgdHlwZW9mIGFzdCAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGFzdC50eXBlID09PSBcInN0cmluZ1wiIHx8IGFzdC50eXBlID09PSBcImludFwiIHx8IGFzdC50eXBlID09PSBcImZsb2F0XCIgfHwgYXN0LnR5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgcmV0dXJuIGFzdC52YWx1ZTtcbiAgfVxuICBpZiAoYXN0LnR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBpZiAoXG4gICAgICBhc3Qub2JqZWN0VHlwZSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgYXN0Lm9iamVjdFR5cGUgPT09IFwibnVtYmVyXCIgfHxcbiAgICAgIGFzdC5vYmplY3RUeXBlID09PSBcImZsb2F0XCIgfHxcbiAgICAgIGFzdC5vYmplY3RUeXBlID09PSBcImludFwiIHx8XG4gICAgICBhc3Qub2JqZWN0VHlwZSA9PT0gXCJib29sZWFuXCIgfHxcbiAgICAgIGFzdC5vYmplY3RUeXBlID09PSBcImJvb2xcIlxuICAgICkge1xuICAgICAgcmV0dXJuIGFzdC52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY29sbGVjdEZ1bmN0aW9uQ2FsbHMoYXN0OiBhbnksIGNhbGxzOiBhbnlbXSA9IFtdKTogYW55W10ge1xuICBpZiAoIWFzdCB8fCB0eXBlb2YgYXN0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIGNhbGxzO1xuICB9XG5cbiAgaWYgKGFzdC50eXBlID09PSBcImluZGV4XCIpIHtcbiAgICBjYWxscy5wdXNoKHtcbiAgICAgIHR5cGU6IFwiZnVuY3Rpb25fY2FsbFwiLFxuICAgICAgZnVuY19uYW1lOiBcImluZGV4XCIsXG4gICAgICBwYXJhbWV0ZXJzOiBbeyBwYXJhbWV0ZXI6IFwiaW5kZXhcIiwgdmFsdWU6IHsgdHlwZTogXCJpbnRcIiwgdmFsdWU6IGFzdC5pbmRleCB9IH1dLFxuICAgIH0pO1xuICAgIHJldHVybiBjb2xsZWN0RnVuY3Rpb25DYWxscyhhc3QucGFyZW50LCBjYWxscyk7XG4gIH1cblxuICBpZiAoYXN0LnR5cGUgPT09IFwiYWNjZXNzXCIpIHtcbiAgICBpZiAoYXN0LmFjY2VzcyAmJiBhc3QuYWNjZXNzLnR5cGUgPT09IFwiZnVuY3Rpb25fY2FsbFwiKSB7XG4gICAgICBjYWxscy5wdXNoKGFzdC5hY2Nlc3MpO1xuICAgIH1cbiAgICByZXR1cm4gY29sbGVjdEZ1bmN0aW9uQ2FsbHMoYXN0LnBhcmVudCwgY2FsbHMpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGxzO1xufVxuXG5mdW5jdGlvbiBnZXRDYWxsUGFyYW0oY2FsbDogYW55LCBwYXJhbU5hbWU6IHN0cmluZyk6IGFueSB8IHVuZGVmaW5lZCB7XG4gIGlmICghY2FsbCB8fCAhQXJyYXkuaXNBcnJheShjYWxsLnBhcmFtZXRlcnMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBlbnRyeSA9IGNhbGwucGFyYW1ldGVycy5maW5kKChwYXJhbTogYW55KSA9PiBwYXJhbS5wYXJhbWV0ZXIgPT09IHBhcmFtTmFtZSk7XG4gIHJldHVybiBlbnRyeT8udmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0UXVlcnlJbnRlbnRGcm9tQXN0KGFzdDogYW55KTogUXVlcnlJbnRlbnQgfCBudWxsIHtcbiAgY29uc3QgY2FsbHMgPSBjb2xsZWN0RnVuY3Rpb25DYWxscyhhc3QsIFtdKS5yZXZlcnNlKCk7XG4gIGNvbnN0IG9wczogUXVlcnlJbnRlbnRPcGVyYXRpb25bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgY2FsbCBvZiBjYWxscykge1xuICAgIGNvbnN0IGZ1bmNOYW1lID0gY2FsbD8uZnVuY19uYW1lO1xuICAgIGlmIChmdW5jTmFtZSA9PT0gXCJtYXRjaGluZ1wiIHx8IGZ1bmNOYW1lID09PSBcImNvbnRhaW5zXCIgfHwgZnVuY05hbWUgPT09IFwiZXF1YWxzXCIpIHtcbiAgICAgIGNvbnN0IGZpZWxkQXN0ID0gZ2V0Q2FsbFBhcmFtKGNhbGwsIFwiZmllbGRcIik7XG4gICAgICBjb25zdCB2YWx1ZUFzdCA9IGdldENhbGxQYXJhbShjYWxsLCBcInZhbHVlXCIpO1xuICAgICAgY29uc3QgZmllbGRQYXRoID0gYWNjZXNzb3JGaWVsZFRvUGF0aChmaWVsZEFzdD8uZmllbGQpO1xuICAgICAgY29uc3QgdmFsdWUgPSBhc3RWYWx1ZVRvUHJpbWl0aXZlKHZhbHVlQXN0KTtcbiAgICAgIGlmIChmaWVsZFBhdGggJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHMucHVzaCh7XG4gICAgICAgICAga2luZDogZnVuY05hbWUsXG4gICAgICAgICAgZmllbGQ6IGZpZWxkUGF0aCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoZnVuY05hbWUgPT09IFwiYmV0d2VlblwiKSB7XG4gICAgICBjb25zdCBmaWVsZEFzdCA9IGdldENhbGxQYXJhbShjYWxsLCBcImZpZWxkXCIpO1xuICAgICAgY29uc3QgZnJvbSA9IGFzdFZhbHVlVG9QcmltaXRpdmUoZ2V0Q2FsbFBhcmFtKGNhbGwsIFwiZnJvbVwiKSk7XG4gICAgICBjb25zdCB0byA9IGFzdFZhbHVlVG9QcmltaXRpdmUoZ2V0Q2FsbFBhcmFtKGNhbGwsIFwidG9cIikpO1xuICAgICAgY29uc3QgZmllbGRQYXRoID0gYWNjZXNzb3JGaWVsZFRvUGF0aChmaWVsZEFzdD8uZmllbGQpO1xuICAgICAgaWYgKGZpZWxkUGF0aCAmJiAoZnJvbSAhPT0gdW5kZWZpbmVkIHx8IHRvICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIG9wcy5wdXNoKHtcbiAgICAgICAgICBraW5kOiBcImJldHdlZW5cIixcbiAgICAgICAgICBmaWVsZDogZmllbGRQYXRoLFxuICAgICAgICAgIC4uLihmcm9tICE9PSB1bmRlZmluZWQgPyB7IGZyb20gfSA6IHt9KSxcbiAgICAgICAgICAuLi4odG8gIT09IHVuZGVmaW5lZCA/IHsgdG8gfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoZnVuY05hbWUgPT09IFwic29ydFwiKSB7XG4gICAgICBjb25zdCBmaWVsZEFzdCA9IGdldENhbGxQYXJhbShjYWxsLCBcImZpZWxkXCIpO1xuICAgICAgY29uc3QgYXNjZW5kaW5nID0gYXN0VmFsdWVUb1ByaW1pdGl2ZShnZXRDYWxsUGFyYW0oY2FsbCwgXCJhc2NlbmRpbmdcIikpO1xuICAgICAgY29uc3QgZmllbGRQYXRoID0gYWNjZXNzb3JGaWVsZFRvUGF0aChmaWVsZEFzdD8uZmllbGQpO1xuICAgICAgaWYgKGZpZWxkUGF0aCkge1xuICAgICAgICBvcHMucHVzaCh7XG4gICAgICAgICAga2luZDogXCJzb3J0XCIsXG4gICAgICAgICAgZmllbGQ6IGZpZWxkUGF0aCxcbiAgICAgICAgICBhc2NlbmRpbmc6IGFzY2VuZGluZyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IEJvb2xlYW4oYXNjZW5kaW5nKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoZnVuY05hbWUgPT09IFwiaW5kZXhcIikge1xuICAgICAgY29uc3QgaW5kZXggPSBhc3RWYWx1ZVRvUHJpbWl0aXZlKGdldENhbGxQYXJhbShjYWxsLCBcImluZGV4XCIpKTtcbiAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgb3BzLnB1c2goe1xuICAgICAgICAgIGtpbmQ6IFwiaW5kZXhcIixcbiAgICAgICAgICB2YWx1ZTogaW5kZXgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGZ1bmNOYW1lID09PSBcImxlbmd0aFwiKSB7XG4gICAgICBvcHMucHVzaCh7IGtpbmQ6IFwibGVuZ3RoXCIgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBKU09OLnN0cmluZ2lmeShvcHMpO1xuICByZXR1cm4ge1xuICAgIG9wcyxcbiAgICBoYXNoOiBoYXNoU3RyaW5nKHNlcmlhbGl6ZWQpLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgdXNlR2VuaWVDb2RlU2VsZWN0b3IgPSAoY29tbWFuZDogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBhc3luYyAoc3RhdGU6IGFueSkgPT4ge1xuICAgIHVpQWN0aXZlID0gZmFsc2U7XG4gICAgc2V0U2hhcmVkU3RhdGUoc3RhdGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEdlbmllSW50ZXJwcmV0ZXIuZHNsSW50ZXJwcmV0ZXIuaW50ZXJwcmV0KGNvbW1hbmQpO1xuICAgIC8vIGxvZ2dlci5pbmZvKGBleGVjdXRlZCByZXN1bHQgJHtyZXN1bHR9YCk7XG4gICAgLy8gbG9nZ2VyLmluZm8oYGFmdGVyIGV4ZWN1dGluZyBzdGF0ZSAke0pTT04uc3RyaW5naWZ5KHN0YXRlKX1gKTtcbiAgICB1aUFjdGl2ZSA9IHRydWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG5cbmNvbnN0IHNoYWxsb3dFcXVhbFdpdGhBcnJheSA9IChsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobGVmdCkgJiYgQXJyYXkuaXNBcnJheShyaWdodCkpIHtcbiAgICBpZiAobGVmdC5sZW5ndGggIT09IHJpZ2h0Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlZnQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghc2hhbGxvd0VxdWFsV2l0aEFycmF5KGxlZnRbaV0sIHJpZ2h0W2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzaGFsbG93RXF1YWwobGVmdCwgcmlnaHQpO1xuICB9XG59O1xuXG5jb25zdCBjb252ZXJ0R2VuaWVDbGFzc1RvU3RhdGUgPSAob2JqOiBhbnkpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmoubWFwKChlbGVtZW50KSA9PiBjb252ZXJ0R2VuaWVDbGFzc1RvU3RhdGUoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKFxuICAgIG9iaiA9PT0gbnVsbCB8fFxuICAgIG9iaiA9PT0gdW5kZWZpbmVkIHx8XG4gICAgb2JqLmNvbnN0cnVjdG9yID09PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfSBlbHNlIGlmIChvYmouY29uc3RydWN0b3IucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuaWVPYmplY3QpIHtcbiAgICBpZiAob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBpbnN0YW5jZW9mIERhdGFDbGFzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX19nZW5pZU9iamVjdFR5cGU6IFwiRGF0YUNsYXNzXCIsXG4gICAgICAgIF9fZ2VuaWVPYmplY3RDbGFzczogb2JqLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgIF9fZ2VuaWVPYmplY3RLZXk6IG9ialtvYmouZ2VuaWVLZXldLFxuICAgICAgICAuLi5vYmouX19nZXRTdGF0ZSgpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgaW5zdGFuY2VvZiBIZWxwZXJDbGFzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX19nZW5pZU9iamVjdFR5cGU6IFwiSGVscGVyQ2xhc3NcIixcbiAgICAgICAgX19nZW5pZU9iamVjdENsYXNzOiBvYmouY29uc3RydWN0b3IubmFtZSxcbiAgICAgICAgLi4ub2JqLmxvY2FsU3RvcmUsXG4gICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIEdlbmllT2JqZWN0IHR5cGVcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVzZUdlbmllU2VsZWN0b3IgPSAoc2VsZWN0b3I6IGFueSkgPT4ge1xuICBsZXQgc2VsZWN0b3JSZXN1bHQ6IGFueSA9IHVuZGVmaW5lZDtcbiAgdXNlU2VsZWN0b3IoKHN0YXRlOiBhbnkpID0+IHtcbiAgICBzZXRTaGFyZWRTdGF0ZShzdGF0ZSk7XG4gICAgc2VsZWN0b3JSZXN1bHQgPSBzZWxlY3RvcihzdGF0ZSk7XG4gICAgcmV0dXJuIGNvbnZlcnRHZW5pZUNsYXNzVG9TdGF0ZShzZWxlY3RvclJlc3VsdCk7XG4gIH0sIHNoYWxsb3dFcXVhbFdpdGhBcnJheSk7XG4gIHJldHVybiBzZWxlY3RvclJlc3VsdDtcbn07XG5cbnR5cGUgR2VuaWVDb2RlUmVzdWx0ID0ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICByZXN1bHRzOiBhbnlbXTtcbn07XG5cbmNvbnN0IFJFU1VMVF9QUkVWSUVXX01BWF9MRU5HVEggPSAxNjA7XG5cbmZ1bmN0aW9uIHRydW5jYXRlVGV4dCh2YWx1ZTogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPD0gbWF4TGVuZ3RoKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBgJHt2YWx1ZS5zbGljZSgwLCBNYXRoLm1heCgwLCBtYXhMZW5ndGggLSAxKSkudHJpbUVuZCgpfeKApmA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN5c3RlbU1lc3NhZ2UoXG4gIG1pbmltYWxUZXh0OiBzdHJpbmcsXG4gIGZ1bGxUZXh0OiBzdHJpbmcsXG4gIHR5cGU6IEFnZW50UmVzcG9uc2VQYXlsb2FkW1widHlwZVwiXSA9IFwiaW5mb1wiLFxuICBzaG91bGRTcGVhayA9IGZhbHNlLFxuICBvcmlnaW46IFJlYWN0R2VuaWVNZXNzYWdlW1wib3JpZ2luXCJdID0gXCJzeXN0ZW1cIixcbik6IFJlYWN0R2VuaWVNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBtaW5pbWFsVGV4dCxcbiAgICBmdWxsVGV4dCxcbiAgICB0eXBlLFxuICAgIHNob3VsZFNwZWFrLFxuICAgIG9yaWdpbixcbiAgICBtZXNzYWdlOiBmdWxsVGV4dCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVXNlckZhY2luZ01lc3NhZ2UoXG4gIGVycm9yOiBHZW5pZVVzZXJGYWNpbmdFcnJvcixcbiAgb3JpZ2luOiBSZWFjdEdlbmllTWVzc2FnZVtcIm9yaWdpblwiXSxcbiAgc2hvdWxkU3BlYWtCeURlZmF1bHQ6IGJvb2xlYW4sXG4pOiBSZWFjdEdlbmllTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgbWluaW1hbFRleHQ6IGVycm9yLm1pbmltYWxUZXh0LFxuICAgIGZ1bGxUZXh0OiBlcnJvci5mdWxsVGV4dCxcbiAgICB0eXBlOiBlcnJvci50eXBlLFxuICAgIHNob3VsZFNwZWFrOiBlcnJvci5zaG91bGRTcGVhayA/PyBzaG91bGRTcGVha0J5RGVmYXVsdCxcbiAgICBvcmlnaW4sXG4gICAgbWVzc2FnZTogZXJyb3IuZnVsbFRleHQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNhZmVTZXJpYWxpemVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFwibm9uZVwiO1xuICB9XG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBTdHJpbmcodmFsdWUpO1xuICByZXR1cm4gdHJ1bmNhdGVUZXh0KHNlcmlhbGl6ZWQsIFJFU1VMVF9QUkVWSUVXX01BWF9MRU5HVEgpO1xufVxuXG5mdW5jdGlvbiBidWlsZFJlc3VsdERpZ2VzdChyZXN1bHQ6IGFueSwgcGFyc2VkOiBzdHJpbmcpIHtcbiAgaWYgKCFyZXN1bHQgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZWQsXG4gICAgICBzdGF0dXM6IFwidW5rbm93blwiLFxuICAgICAgcmVzdWx0VHlwZTogXCJ1bmtub3duXCIsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXN1bHQudHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShyZXN1bHQudmFsdWUpID8gcmVzdWx0LnZhbHVlIDogW107XG4gICAgY29uc3QgZmlyc3QgPSB2YWx1ZXMubGVuZ3RoID4gMCA/IHZhbHVlc1swXSA6IG51bGw7XG4gICAgY29uc3QgZmlyc3RPYmplY3RUeXBlID0gZmlyc3Q/Lm9iamVjdFR5cGUgfHwgbnVsbDtcbiAgICBjb25zdCBmaXJzdFByZXZpZXcgPVxuICAgICAgZmlyc3QgJiYgZmlyc3QudHlwZSA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IHNhZmVTZXJpYWxpemVWYWx1ZShmaXJzdC52YWx1ZSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZCxcbiAgICAgIHN0YXR1czogXCJva1wiLFxuICAgICAgcmVzdWx0VHlwZTogXCJhcnJheVwiLFxuICAgICAgY291bnQ6IHZhbHVlcy5sZW5ndGgsXG4gICAgICBmaXJzdE9iamVjdFR5cGUsXG4gICAgICBmaXJzdFByZXZpZXcsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXN1bHQudHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZWQsXG4gICAgICBzdGF0dXM6IFwib2tcIixcbiAgICAgIHJlc3VsdFR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBvYmplY3RUeXBlOiByZXN1bHQub2JqZWN0VHlwZSB8fCBcInVua25vd25cIixcbiAgICAgIHByZXZpZXc6IHNhZmVTZXJpYWxpemVWYWx1ZShyZXN1bHQudmFsdWUpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhcnNlZCxcbiAgICBzdGF0dXM6IFwib2tcIixcbiAgICByZXN1bHRUeXBlOiBcInVua25vd25cIixcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVHZW5pZUNvZGUoXG4gIGNvbW1hbmQ6IHVua25vd24sXG4gIG9wdGlvbnM6IHtcbiAgICBvcmlnaW4/OiBSZWFjdEdlbmllTWVzc2FnZVtcIm9yaWdpblwiXTtcbiAgICBzaG91bGRTcGVha0Vycm9ycz86IGJvb2xlYW47XG4gIH0gPSB7fSxcbik6IFByb21pc2U8R2VuaWVDb2RlUmVzdWx0PiB7XG4gICAgY29uc3Qgc2FuaXRpemVkID1cbiAgICAgIHR5cGVvZiBjb21tYW5kID09PSBcInN0cmluZ1wiID8gY29tbWFuZC50cmltKCkgOiBcIlwiO1xuICAgIGNvbnN0IG1lc3NhZ2VPcmlnaW4gPSBvcHRpb25zLm9yaWdpbiA/PyBcInN5c3RlbVwiO1xuICAgIGNvbnN0IHNob3VsZFNwZWFrRXJyb3JzID0gQm9vbGVhbihvcHRpb25zLnNob3VsZFNwZWFrRXJyb3JzKTtcbiAgICAvLyBsb2dnZXIuaW5mbyhgZXhlY3V0aW5nIGNvbW1hbmQgOiAke3Nhbml0aXplZH1gKTtcblxuICAgIGlmICghc2FuaXRpemVkKSB7XG4gICAgICBnZW5pZURpc3BhdGNoKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVhY3RHZW5pZVN0YXRlID0gc2hhcmVkU3RhdGUgYXMgUmVhY3RHZW5pZVN0YXRlO1xuICAgICAgICByZWFjdEdlbmllU3RhdGUubWVzc2FnZSA9IGNyZWF0ZVN5c3RlbU1lc3NhZ2UoXG4gICAgICAgICAgXCJObyBhY3Rpb25hYmxlIGNvbW1hbmQuXCIsXG4gICAgICAgICAgXCJJIGhlYXJkIHlvdSwgYnV0IHRoZXJlIGlzIG5vIGFjdGlvbmFibGUgY29tbWFuZCB0byBydW4uXCIsXG4gICAgICAgICAgXCJpbmZvXCIsXG4gICAgICAgICAgc2hvdWxkU3BlYWtFcnJvcnMsXG4gICAgICAgICAgbWVzc2FnZU9yaWdpbixcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IFtuZXcgRXJyb3IoXCJObyBhY3Rpb25hYmxlIGNvbW1hbmRcIildLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBHdWFyZCBhZ2FpbnN0IEdlbmllSW50ZXJwcmV0ZXIgbm90IGJlaW5nIGluaXRpYWxpemVkXG4gICAgaWYgKCFHZW5pZUludGVycHJldGVyIHx8ICFHZW5pZUludGVycHJldGVyLmRzbEludGVycHJldGVyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0dlbmllSW50ZXJwcmV0ZXIgaXMgbm90IGluaXRpYWxpemVkJyk7XG4gICAgICBnZW5pZURpc3BhdGNoKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVhY3RHZW5pZVN0YXRlID0gc2hhcmVkU3RhdGUgYXMgUmVhY3RHZW5pZVN0YXRlO1xuICAgICAgICByZWFjdEdlbmllU3RhdGUubWVzc2FnZSA9IGNyZWF0ZVN5c3RlbU1lc3NhZ2UoXG4gICAgICAgICAgXCJTeXN0ZW0gbm90IHJlYWR5LlwiLFxuICAgICAgICAgIFwiU3lzdGVtIG5vdCByZWFkeS4gUGxlYXNlIHRyeSBhZ2Fpbi5cIixcbiAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgICAgc2hvdWxkU3BlYWtFcnJvcnMsXG4gICAgICAgICAgbWVzc2FnZU9yaWdpbixcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IFtuZXcgRXJyb3IoJ0dlbmllSW50ZXJwcmV0ZXIgbm90IGluaXRpYWxpemVkJyldLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgYXdhaXQgR2VuaWVJbnRlcnByZXRlci5kc2xJbnRlcnByZXRlci5pbnRlcnByZXRTdGVwcyhzYW5pdGl6ZWQpO1xuICAgICAgLy8gY29uc29sZS5sb2coYGV4ZWN1dGVkIHJlc3VsdCAke3Jlc3VsdH1gKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIHJlc3VsdHM6IHJlc3VsdCxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdlcnJvciBleGVjdXRpbmcgY29tbWFuZDonLCBzYW5pdGl6ZWQsIGUpO1xuICAgICAgZ2VuaWVEaXNwYXRjaCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWN0R2VuaWVTdGF0ZSA9IHNoYXJlZFN0YXRlIGFzIFJlYWN0R2VuaWVTdGF0ZTtcbiAgICAgICAgcmVhY3RHZW5pZVN0YXRlLm1lc3NhZ2UgPSBpc0dlbmllVXNlckZhY2luZ0Vycm9yKGUpXG4gICAgICAgICAgPyBjcmVhdGVVc2VyRmFjaW5nTWVzc2FnZShlLCBtZXNzYWdlT3JpZ2luLCBzaG91bGRTcGVha0Vycm9ycylcbiAgICAgICAgICA6IGNyZWF0ZVN5c3RlbU1lc3NhZ2UoXG4gICAgICAgICAgICAgIFwiSSBjb3VsZCBub3QgcHJvY2VzcyB0aGF0LlwiLFxuICAgICAgICAgICAgICBcIlNvcnJ5LCBJIGRvbid0IHVuZGVyc3RhbmQuLi5cIixcbiAgICAgICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgICAgICBzaG91bGRTcGVha0Vycm9ycyxcbiAgICAgICAgICAgICAgbWVzc2FnZU9yaWdpbixcbiAgICAgICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBbZV0sXG4gICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlSZXN1bHQoXG4gIGV4ZWN1dGlvblJlc3VsdDogR2VuaWVDb2RlUmVzdWx0LFxuICB0cmFuc2NyaXB0OiBzdHJpbmcsXG4gIHBhcnNlZDogc3RyaW5nLFxuICBnZW5pZUludGVyZmFjZXM6IEdlbmllSW50ZXJmYWNlU3BlY1tdLFxuKSB7XG4gIGdlbmllRGlzcGF0Y2goKCkgPT4ge1xuICAgIGxldCBhbGxEaXNwbGF5aW5nT2JqZWN0cyA9IFtdO1xuICAgIGxldCBkaXNwbGF5aW5nT2JqZWN0ID0gbnVsbDtcbiAgICBsZXQgZGlzcGxheWluZ09iamVjdFR5cGUgPSBcIlwiO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50UmVzdWx0ID0gZXhlY3V0aW9uUmVzdWx0LnJlc3VsdHNbMF07XG4gICAgY29uc3Qgc3RhdGVtZW50QXN0ID0gc3RhdGVtZW50UmVzdWx0Py5hc3Q7XG4gICAgY29uc3QgcmVzdWx0U3RlcHM6IFt7IGFzdDogYW55OyByZXN1bHQ6IGFueSB9XSA9XG4gICAgICBzdGF0ZW1lbnRSZXN1bHRbXCJzdGVwc1wiXTtcbiAgICBjb25zdCBxdWVyeUludGVudCA9IGV4dHJhY3RRdWVyeUludGVudEZyb21Bc3Qoc3RhdGVtZW50QXN0KTtcbiAgICBsZXQgbGFzdFJlc3VsdCA9IHRydWU7XG5cbiAgICBmb3IgKGxldCBpID0gcmVzdWx0U3RlcHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChpICE9IHJlc3VsdFN0ZXBzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgbGFzdFJlc3VsdCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RlcCA9IHJlc3VsdFN0ZXBzW2ldO1xuICAgICAgYWxsRGlzcGxheWluZ09iamVjdHMgPSBbXTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGBsYXN0IGV4ZWN1dGVkIHN0ZXAgJHtKU09OLnN0cmluZ2lmeShzdGVwKX1gKTtcbiAgICAgIGNvbnN0IHN0ZXBSZXN1bHQgPSBzdGVwLnJlc3VsdDtcbiAgICAgIGlmIChzdGVwUmVzdWx0LnR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgYWxsRGlzcGxheWluZ09iamVjdHMucHVzaChzdGVwUmVzdWx0KTtcbiAgICAgIH0gZWxzZSBpZiAoc3RlcFJlc3VsdC50eXBlID09PSBcImFycmF5XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHN0ZXBSZXN1bHQudmFsdWUpIHtcbiAgICAgICAgICBhbGxEaXNwbGF5aW5nT2JqZWN0cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBwcmltYXJ5VmFsdWUgPVxuICAgICAgICBhbGxEaXNwbGF5aW5nT2JqZWN0cy5sZW5ndGggPiAwID8gYWxsRGlzcGxheWluZ09iamVjdHNbMF0udmFsdWUgOiBudWxsO1xuICAgICAgLy8gY2hlY2sgaWYgb2JqZWN0IGNhbiBiZSBkaXNwbGF5ZWRcbiAgICAgIGlmIChhbGxEaXNwbGF5aW5nT2JqZWN0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZGlzcGxheWluZ09iamVjdFR5cGUgPSBhbGxEaXNwbGF5aW5nT2JqZWN0c1swXS5vYmplY3RUeXBlO1xuICAgICAgICBkaXNwbGF5aW5nT2JqZWN0ID0gYWxsRGlzcGxheWluZ09iamVjdHNbMF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmltYXJ5VmFsdWUgJiZcbiAgICAgICAgICBPYmplY3QuaGFzT3duKGFsbERpc3BsYXlpbmdPYmplY3RzWzBdLCBcInZhbHVlXCIpICYmXG4gICAgICAgICAgT2JqZWN0Lmhhc093bihwcmltYXJ5VmFsdWUsIFwibG9jYWxTdG9yZVwiKSAmJlxuICAgICAgICAgIGFsbERpc3BsYXlpbmdPYmplY3RzWzBdLnZhbHVlLmxvY2FsU3RvcmUuX19nZW5pZU9iamVjdFR5cGUgPT09XG4gICAgICAgICAgICBcIkhlbHBlckNsYXNzXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGlzcGxheWluZ09iamVjdFR5cGUgPSBcInVuZGVmaW5lZFwiO1xuICAgICAgICAgIGRpc3BsYXlpbmdPYmplY3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGFsbERpc3BsYXlpbmdPYmplY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZGlzcGxheWluZ09iamVjdFR5cGUgPSBhbGxEaXNwbGF5aW5nT2JqZWN0c1swXS5vYmplY3RUeXBlICsgXCJbXVwiO1xuICAgICAgICBkaXNwbGF5aW5nT2JqZWN0ID0gYWxsRGlzcGxheWluZ09iamVjdHM7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmltYXJ5VmFsdWUgJiZcbiAgICAgICAgICBPYmplY3QuaGFzT3duKGFsbERpc3BsYXlpbmdPYmplY3RzWzBdLCBcInZhbHVlXCIpICYmXG4gICAgICAgICAgT2JqZWN0Lmhhc093bihwcmltYXJ5VmFsdWUsIFwibG9jYWxTdG9yZVwiKSAmJlxuICAgICAgICAgIGFsbERpc3BsYXlpbmdPYmplY3RzWzBdLnZhbHVlLmxvY2FsU3RvcmUuX19nZW5pZU9iamVjdFR5cGUgPT09XG4gICAgICAgICAgICBcIkhlbHBlckNsYXNzXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGlzcGxheWluZ09iamVjdFR5cGUgPSBcInVuZGVmaW5lZFwiO1xuICAgICAgICAgIGRpc3BsYXlpbmdPYmplY3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGFsbERpc3BsYXlpbmdPYmplY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwbGF5aW5nT2JqZWN0VHlwZSA9IFwidW5kZWZpbmVkXCI7XG4gICAgICAgIGRpc3BsYXlpbmdPYmplY3QgPSBudWxsO1xuICAgICAgfVxuICAgICAgLy8gaWYgZGlzcGxheWluZ09iamVjdFR5cGUgaW4gdGhlIGtleXMgb2YgQWxsR2VuaWVPYmplY3RJbnRlcmZhY2VzXG4gICAgICBpZiAoQWxsR2VuaWVPYmplY3RJbnRlcmZhY2VzLnN1cHBvcnRlZFR5cGVzLmhhcyhkaXNwbGF5aW5nT2JqZWN0VHlwZSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBjYW5ub3RkaXNwbGF5ID0gZmFsc2U7XG4gICAgbGV0IG9uU2NyZWVuID0gdHJ1ZTtcbiAgICBsZXQgaW5zdGFudGlhdGVkRGlzcGxheWluZ09iamVjdCA9IG51bGw7XG4gICAgaWYgKGRpc3BsYXlpbmdPYmplY3QgIT0gbnVsbCkge1xuICAgICAgLy8gaWYgZGlzcGxheWluZ09iamVjdCBpcyBhbiBhcnJheVxuICAgICAgaWYgKGRpc3BsYXlpbmdPYmplY3QgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAvLyBhbHdheXMgZGlzcGxheVxuICAgICAgICBvblNjcmVlbiA9IGZhbHNlO1xuICAgICAgICBpbnN0YW50aWF0ZWREaXNwbGF5aW5nT2JqZWN0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBkaXNwbGF5aW5nT2JqZWN0KSB7XG4gICAgICAgICAgY29uc3QgSW5zdGFuY2UgPSBJbnN0YW50aWF0ZUdlbmllT2JqZWN0KHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogZWxlbWVudC5vYmplY3RUeXBlLFxuICAgICAgICAgICAga2V5OiBlbGVtZW50LnZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChJbnN0YW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjYW5ub3RkaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnN0YW50aWF0ZWREaXNwbGF5aW5nT2JqZWN0LnB1c2goSW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBJbnN0YW5jZSA9IEluc3RhbnRpYXRlR2VuaWVPYmplY3Qoe1xuICAgICAgICAgIGNsYXNzTmFtZTogZGlzcGxheWluZ09iamVjdC5vYmplY3RUeXBlLFxuICAgICAgICAgIGtleTogZGlzcGxheWluZ09iamVjdC52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChJbnN0YW5jZSA9PT0gdW5kZWZpbmVkKSBjYW5ub3RkaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGxhc3RSZXN1bHQpIHtcbiAgICAgICAgICAgIC8vIGFsd2F5cyBkaXNwbGF5XG4gICAgICAgICAgICBvblNjcmVlbiA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBkaXNwbGF5aW5nT2JqZWN0cyBpcyBvbiBzY3JlZW4gYWxyZWFkeVxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0SW50ZXJmYWNlID0gZ2VuaWVJbnRlcmZhY2VzLmZpbmQoXG4gICAgICAgICAgICAgIChnZW5pZUludGVyZmFjZSkgPT5cbiAgICAgICAgICAgICAgICBnZW5pZUludGVyZmFjZS5jbGFzc05hbWUgPT09IEluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWUgJiZcbiAgICAgICAgICAgICAgICBzaGFsbG93RXF1YWwoXG4gICAgICAgICAgICAgICAgICBnZW5pZUludGVyZmFjZS5rZXksXG4gICAgICAgICAgICAgICAgICBJbnN0YW5jZS5fZ2V0Q29uc3RydWN0b3JQYXJhbXMoKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0SW50ZXJmYWNlKSB7XG4gICAgICAgICAgICAgIG9uU2NyZWVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5zdGFudGlhdGVkRGlzcGxheWluZ09iamVjdCA9IEluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIEdlbmllSW50ZXJwcmV0ZXIubmxQYXJzZXJcbiAgICAgIC5yZXNwb25kKFxuICAgICAgICB0cmFuc2NyaXB0LFxuICAgICAgICBwYXJzZWQsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIGJ1aWxkUmVzdWx0RGlnZXN0KFxuICAgICAgICAgICAgLy8gbm93IHdlIG9ubHkgZGlzcGxheSB0aGUgbGFzdCByZXN1bHRcbiAgICAgICAgICAgIGV4ZWN1dGlvblJlc3VsdC5yZXN1bHRzW2V4ZWN1dGlvblJlc3VsdC5yZXN1bHRzLmxlbmd0aCAtIDFdLnJlc3VsdCxcbiAgICAgICAgICAgIHBhcnNlZCxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgcmVzcG9uZCByZXN1bHQ6ICR7cmVzdWx0fWApO1xuICAgICAgICBnZW5pZURpc3BhdGNoKCgpID0+IHtcbiAgICAgICAgICBjb25zdCByZWFjdEdlbmllU3RhdGUgPSBzaGFyZWRTdGF0ZSBhcyBSZWFjdEdlbmllU3RhdGU7XG4gICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVhY3RHZW5pZVN0YXRlLm1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgICAgb3JpZ2luOiBcInZvaWNlXCIsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3VsdC5mdWxsVGV4dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHJlc3VsdEVudHJ5OiBSZXN1bHRXaW5kb3dFbnRyeSB8IG51bGwgPSBudWxsO1xuICAgICAgICAgIGlmICghY2Fubm90ZGlzcGxheSAmJiBhbGxEaXNwbGF5aW5nT2JqZWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBvcmRlcmVkQ29uc3RydWN0b3JQYXJhbXMgPSBhbGxEaXNwbGF5aW5nT2JqZWN0c1xuICAgICAgICAgICAgICAubWFwKChkaXNwbGF5aW5nT2JqZWN0KSA9PlxuICAgICAgICAgICAgICAgIGNyZWF0ZUltbXV0YWJsZUNvbnN0cnVjdG9yUGFyYW1zU25hcHNob3QoZGlzcGxheWluZ09iamVjdC52YWx1ZSksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAocGFyYW1zKTogcGFyYW1zIGlzIFJlY29yZDxzdHJpbmcsIGFueT4gPT5cbiAgICAgICAgICAgICAgICAgIHBhcmFtcyAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAob3JkZXJlZENvbnN0cnVjdG9yUGFyYW1zLmxlbmd0aCA+IDAgJiYgZGlzcGxheWluZ09iamVjdFR5cGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJlZGljdGVkRXZlbnRJZCA9IHJlYWN0R2VuaWVTdGF0ZS5uYXZTdGFjayArIDE7XG4gICAgICAgICAgICAgIHJlc3VsdEVudHJ5ID0gcHV0UmVzdWx0V2luZG93RW50cnkocmVhY3RHZW5pZVN0YXRlLCB7XG4gICAgICAgICAgICAgICAgZXZlbnRJZDogcHJlZGljdGVkRXZlbnRJZCxcbiAgICAgICAgICAgICAgICByZXN1bHRPYmplY3RUeXBlOiBkaXNwbGF5aW5nT2JqZWN0VHlwZSxcbiAgICAgICAgICAgICAgICBvcmRlcmVkQ29uc3RydWN0b3JQYXJhbXMsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghb25TY3JlZW4gJiYgIWNhbm5vdGRpc3BsYXkpIHtcbiAgICAgICAgICAgIHJlYWN0R2VuaWVTdGF0ZS5uYXZTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgb2JqZWN0Vmlld0NsYXNzTmFtZTogQWxsR2VuaWVPYmplY3RJbnRlcmZhY2VzLmdldEludGVyZmFjZXMoXG4gICAgICAgICAgICAgICAgaW5zdGFudGlhdGVkRGlzcGxheWluZ09iamVjdCxcbiAgICAgICAgICAgICAgKS52aWV3Q2xhc3NOYW1lLFxuICAgICAgICAgICAgICBvYmplY3RDb25zdHJ1Y3RvclBhcmFtczpcbiAgICAgICAgICAgICAgICBhbGxEaXNwbGF5aW5nT2JqZWN0cy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICAgID8gYWxsRGlzcGxheWluZ09iamVjdHNbMF0udmFsdWUuX2dldENvbnN0cnVjdG9yUGFyYW1zKClcbiAgICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBhbGxEaXNwbGF5aW5nT2JqZWN0cy5tYXAoKGRpc3BsYXlpbmdPYmplY3QpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5aW5nT2JqZWN0LnZhbHVlLl9nZXRDb25zdHJ1Y3RvclBhcmFtcygpLFxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHF1ZXJ5SW50ZW50LFxuICAgICAgICAgICAgICByZXN1bHRSZWY6IHJlc3VsdEVudHJ5Py5yZXN1bHRSZWYgPz8gbnVsbCxcbiAgICAgICAgICAgICAgcmVzdWx0T2JqZWN0VHlwZTogZGlzcGxheWluZ09iamVjdFR5cGUgfHwgbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWFjdEdlbmllU3RhdGUubmF2U3RhY2sgKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdlcnJvciBnZW5lcmF0aW5nIHJlc3BvbnNlOicsIGVycm9yKTtcbiAgICAgICAgZ2VuaWVEaXNwYXRjaCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVhY3RHZW5pZVN0YXRlID0gc2hhcmVkU3RhdGUgYXMgUmVhY3RHZW5pZVN0YXRlO1xuICAgICAgICAgIHJlYWN0R2VuaWVTdGF0ZS5tZXNzYWdlID0gY3JlYXRlU3lzdGVtTWVzc2FnZShcbiAgICAgICAgICAgIFwiRG9uZS5cIixcbiAgICAgICAgICAgIFwiRG9uZS5cIixcbiAgICAgICAgICAgIFwiaW5mb1wiLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIC8vIGNvbnNvbGUubG9nKGBhZnRlciBleGVjdXRpbmcgc3RhdGUgJHtKU09OLnN0cmluZ2lmeShzaGFyZWRTdGF0ZSl9YCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IG5hdmlnYXRpb24gc3RhdGUgdG8gcHJldmVudCBpbmZpbml0ZSBuYXZpZ2F0aW9uIGxvb3BzXG4gKiBDYWxsIHRoaXMgYWZ0ZXIgaW50ZXJjZXB0aW5nIGFuZCBoYW5kbGluZyBuYXZpZ2F0aW9uIGluIGV4cG8tcm91dGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEdlbmllTmF2aWdhdGlvbigpIHtcbiAgZ2VuaWVEaXNwYXRjaCgoKSA9PiB7XG4gICAgY29uc3QgcmVhY3RHZW5pZVN0YXRlID0gc2hhcmVkU3RhdGUgYXMgUmVhY3RHZW5pZVN0YXRlO1xuICAgIHJlYWN0R2VuaWVTdGF0ZS5uYXZTdGF0ZSA9IHtcbiAgICAgIG9iamVjdFZpZXdDbGFzc05hbWU6IG51bGwsXG4gICAgICBvYmplY3RDb25zdHJ1Y3RvclBhcmFtczogbnVsbCxcbiAgICAgIHF1ZXJ5SW50ZW50OiBudWxsLFxuICAgICAgcmVzdWx0UmVmOiBudWxsLFxuICAgICAgcmVzdWx0T2JqZWN0VHlwZTogbnVsbCxcbiAgICB9O1xuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxrQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQUtBLElBQUFFLFdBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUgsT0FBQTtBQU9BLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUF3RSxTQUFBTSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUYsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsT0FBQWEsT0FBQSxXQUFBZCxDQUFBLElBQUFlLGVBQUEsQ0FBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFsQixDQUFBLEVBQUFHLE1BQUEsQ0FBQWMseUJBQUEsQ0FBQWYsQ0FBQSxLQUFBSCxPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBZ0IsY0FBQSxDQUFBbkIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQU4sQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRCxDQUFBO0FBQUEsU0FBQWdCLGdCQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsWUFBQUQsQ0FBQSxHQUFBbUIsY0FBQSxDQUFBbkIsQ0FBQSxNQUFBRCxDQUFBLEdBQUFHLE1BQUEsQ0FBQWdCLGNBQUEsQ0FBQW5CLENBQUEsRUFBQUMsQ0FBQSxJQUFBb0IsS0FBQSxFQUFBbkIsQ0FBQSxFQUFBTyxVQUFBLE1BQUFhLFlBQUEsTUFBQUMsUUFBQSxVQUFBdkIsQ0FBQSxDQUFBQyxDQUFBLElBQUFDLENBQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFvQixlQUFBbEIsQ0FBQSxRQUFBc0IsQ0FBQSxHQUFBQyxZQUFBLENBQUF2QixDQUFBLHVDQUFBc0IsQ0FBQSxHQUFBQSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBQyxhQUFBdkIsQ0FBQSxFQUFBRCxDQUFBLDJCQUFBQyxDQUFBLEtBQUFBLENBQUEsU0FBQUEsQ0FBQSxNQUFBRixDQUFBLEdBQUFFLENBQUEsQ0FBQXdCLE1BQUEsQ0FBQUMsV0FBQSxrQkFBQTNCLENBQUEsUUFBQXdCLENBQUEsR0FBQXhCLENBQUEsQ0FBQTRCLElBQUEsQ0FBQTFCLENBQUEsRUFBQUQsQ0FBQSx1Q0FBQXVCLENBQUEsU0FBQUEsQ0FBQSxZQUFBSyxTQUFBLHlFQUFBNUIsQ0FBQSxHQUFBNkIsTUFBQSxHQUFBQyxNQUFBLEVBQUE3QixDQUFBO0FBK0RqRSxJQUFJOEIsUUFBUSxHQUFBQyxPQUFBLENBQUFELFFBQUEsR0FBRyxJQUFJO0FBVTFCLE1BQU1FLHlCQUF5QixHQUFHLEVBQUU7QUFDcEMsTUFBTUMsNEJBQTRCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJO0FBRWxELFNBQVNDLG1DQUFtQ0EsQ0FBQ2YsS0FBVSxFQUFjO0VBQ25FLElBQUksQ0FBQ0EsS0FBSyxJQUFJLE9BQU9BLEtBQUssQ0FBQ2dCLHFCQUFxQixLQUFLLFVBQVUsRUFBRTtJQUMvRCxPQUFPLElBQUk7RUFDYjtFQUNBLE9BQU9oQixLQUFLLENBQUNnQixxQkFBcUIsQ0FBQyxDQUFDO0FBQ3RDO0FBRUEsU0FBU0MsZ0JBQWdCQSxDQUFJakIsS0FBUSxFQUFLO0VBQ3hDLElBQUksQ0FBQ0EsS0FBSyxJQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRLEVBQUU7SUFDdkMsT0FBT0EsS0FBSztFQUNkO0VBQ0FsQixNQUFNLENBQUNvQyxNQUFNLENBQUNsQixLQUFLLENBQUM7RUFDcEIsS0FBSyxNQUFNbUIsR0FBRyxJQUFJckMsTUFBTSxDQUFDQyxJQUFJLENBQUNpQixLQUFZLENBQUMsRUFBRTtJQUMzQyxNQUFNb0IsTUFBTSxHQUFJcEIsS0FBSyxDQUFTbUIsR0FBRyxDQUFDO0lBQ2xDLElBQUlDLE1BQU0sSUFBSSxPQUFPQSxNQUFNLEtBQUssUUFBUSxJQUFJLENBQUN0QyxNQUFNLENBQUN1QyxRQUFRLENBQUNELE1BQU0sQ0FBQyxFQUFFO01BQ3BFSCxnQkFBZ0IsQ0FBQ0csTUFBTSxDQUFDO0lBQzFCO0VBQ0Y7RUFDQSxPQUFPcEIsS0FBSztBQUNkO0FBRUEsU0FBU3NCLGtCQUFrQkEsQ0FBSXRCLEtBQVEsRUFBWTtFQUNqRCxJQUFJO0lBQ0YsTUFBTXVCLHFCQUFxQixHQUFJQyxVQUFVLENBQVNDLGVBQWU7SUFDakUsTUFBTUMsTUFBTSxHQUNWLE9BQU9ILHFCQUFxQixLQUFLLFVBQVUsR0FDdkNBLHFCQUFxQixDQUFDdkIsS0FBSyxDQUFDLEdBQzVCMkIsSUFBSSxDQUFDQyxLQUFLLENBQUNELElBQUksQ0FBQ0UsU0FBUyxDQUFDN0IsS0FBSyxDQUFDLENBQUM7SUFDdkMsT0FBT2lCLGdCQUFnQixDQUFDUyxNQUFNLENBQUM7RUFDakMsQ0FBQyxDQUFDLE9BQU9JLEtBQUssRUFBRTtJQUNkQyxjQUFNLENBQUNDLElBQUksQ0FDVCw0RUFBNEUsRUFDNUVGLEtBQ0YsQ0FBQztJQUNELE9BQU8sSUFBSTtFQUNiO0FBQ0Y7QUFFTyxTQUFTRyx3Q0FBd0NBLENBQ3REakMsS0FBVSxFQUNrQjtFQUM1QixNQUFNa0MsaUJBQWlCLEdBQUduQixtQ0FBbUMsQ0FBQ2YsS0FBSyxDQUFDO0VBQ3BFLElBQUksQ0FBQ2tDLGlCQUFpQixJQUFJLE9BQU9BLGlCQUFpQixLQUFLLFFBQVEsRUFBRTtJQUMvRCxPQUFPLElBQUk7RUFDYjtFQUNBLE1BQU1DLFFBQVEsR0FBR2Isa0JBQWtCLENBQUNZLGlCQUFpQixDQUFDO0VBQ3RELElBQUksQ0FBQ0MsUUFBUSxJQUFJLE9BQU9BLFFBQVEsS0FBSyxRQUFRLEVBQUU7SUFDN0MsT0FBTyxJQUFJO0VBQ2I7RUFDQSxPQUFPQSxRQUFRO0FBQ2pCO0FBRUEsU0FBU0MsMEJBQTBCQSxDQUFDQyxLQUFzQixFQUFFO0VBQzFEO0VBQ0E7RUFDQTtFQUNBQSxLQUFLLENBQUNDLGlCQUFpQixHQUFHRCxLQUFLLENBQUNDLGlCQUFpQixHQUFBL0MsYUFBQSxLQUN4QzhDLEtBQUssQ0FBQ0MsaUJBQWlCLElBQzVCLENBQUMsQ0FBQztFQUNORCxLQUFLLENBQUNFLGlCQUFpQixHQUFHRixLQUFLLENBQUNFLGlCQUFpQixHQUM3QyxDQUFDLEdBQUdGLEtBQUssQ0FBQ0UsaUJBQWlCLENBQUMsR0FDNUIsRUFBRTtFQUNOLElBQUksQ0FBQ0YsS0FBSyxDQUFDRyxlQUFlLElBQUlILEtBQUssQ0FBQ0csZUFBZSxJQUFJLENBQUMsRUFBRTtJQUN4REgsS0FBSyxDQUFDRyxlQUFlLEdBQUczQix5QkFBeUI7RUFDbkQ7RUFDQSxJQUFJLENBQUN3QixLQUFLLENBQUNJLGlCQUFpQixJQUFJSixLQUFLLENBQUNJLGlCQUFpQixJQUFJLENBQUMsRUFBRTtJQUM1REosS0FBSyxDQUFDSSxpQkFBaUIsR0FBRzNCLDRCQUE0QjtFQUN4RDtFQUNBLElBQUksQ0FBQ0osTUFBTSxDQUFDZ0MsUUFBUSxDQUFDTCxLQUFLLENBQUNNLG9CQUFvQixDQUFDLEVBQUU7SUFDaEROLEtBQUssQ0FBQ00sb0JBQW9CLEdBQUcsQ0FBQztFQUNoQztBQUNGO0FBRUEsU0FBU0MsaUJBQWlCQSxDQUFDUCxLQUFzQixFQUFFUSxHQUFHLEdBQUdDLElBQUksQ0FBQ0QsR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNuRVQsMEJBQTBCLENBQUNDLEtBQUssQ0FBQztFQUNqQyxNQUFNVSxZQUFZLEdBQUdGLEdBQUcsR0FBR1IsS0FBSyxDQUFDSSxpQkFBaUI7RUFDbERKLEtBQUssQ0FBQ0UsaUJBQWlCLEdBQUdGLEtBQUssQ0FBQ0UsaUJBQWlCLENBQUNyRCxNQUFNLENBQUU4RCxTQUFTLElBQUs7SUFDdEUsTUFBTUMsS0FBSyxHQUFHWixLQUFLLENBQUNDLGlCQUFpQixDQUFDVSxTQUFTLENBQUM7SUFDaEQsSUFBSSxDQUFDQyxLQUFLLEVBQUU7TUFDVixPQUFPLEtBQUs7SUFDZDtJQUNBLElBQUlBLEtBQUssQ0FBQ0MsU0FBUyxHQUFHSCxZQUFZLEVBQUU7TUFDbEMsT0FBT1YsS0FBSyxDQUFDQyxpQkFBaUIsQ0FBQ1UsU0FBUyxDQUFDO01BQ3pDLE9BQU8sS0FBSztJQUNkO0lBQ0EsT0FBTyxJQUFJO0VBQ2IsQ0FBQyxDQUFDO0VBRUYsT0FBT1gsS0FBSyxDQUFDRSxpQkFBaUIsQ0FBQzlDLE1BQU0sR0FBRzRDLEtBQUssQ0FBQ0csZUFBZSxFQUFFO0lBQzdELE1BQU1XLFNBQVMsR0FBR2QsS0FBSyxDQUFDRSxpQkFBaUIsQ0FBQ2EsS0FBSyxDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDRCxTQUFTLEVBQUU7SUFDaEIsT0FBT2QsS0FBSyxDQUFDQyxpQkFBaUIsQ0FBQ2EsU0FBUyxDQUFDO0VBQzNDO0FBQ0Y7QUFFQSxTQUFTRSxvQkFBb0JBLENBQzNCaEIsS0FBc0IsRUFDdEJZLEtBQXlELEVBQ3RDO0VBQ25CYiwwQkFBMEIsQ0FBQ0MsS0FBSyxDQUFDO0VBQ2pDQSxLQUFLLENBQUNNLG9CQUFvQixJQUFJLENBQUM7RUFDL0IsTUFBTUssU0FBUyxHQUFHLE1BQU1DLEtBQUssQ0FBQ0ssT0FBTyxJQUFJakIsS0FBSyxDQUFDTSxvQkFBb0IsRUFBRTtFQUNyRSxNQUFNTyxTQUFTLEdBQUdKLElBQUksQ0FBQ0QsR0FBRyxDQUFDLENBQUM7RUFDNUIsTUFBTVUsYUFBZ0MsR0FBQWhFLGFBQUEsQ0FBQUEsYUFBQSxLQUNqQzBELEtBQUs7SUFDUkQsU0FBUztJQUNURTtFQUFTLEVBQ1Y7RUFDRGIsS0FBSyxDQUFDQyxpQkFBaUIsQ0FBQ1UsU0FBUyxDQUFDLEdBQUdPLGFBQWE7RUFDbERsQixLQUFLLENBQUNFLGlCQUFpQixDQUFDbEQsSUFBSSxDQUFDMkQsU0FBUyxDQUFDO0VBQ3ZDSixpQkFBaUIsQ0FBQ1AsS0FBSyxFQUFFYSxTQUFTLENBQUM7RUFDbkMsT0FBT0ssYUFBYTtBQUN0QjtBQUVBLFNBQVNDLFVBQVVBLENBQUN4RCxLQUFhLEVBQVU7RUFDekMsSUFBSXlELElBQUksR0FBRyxDQUFDO0VBQ1osS0FBSyxJQUFJdEQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSCxLQUFLLENBQUNQLE1BQU0sRUFBRVUsQ0FBQyxFQUFFLEVBQUU7SUFDckNzRCxJQUFJLEdBQUcsQ0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSUEsSUFBSSxHQUFHekQsS0FBSyxDQUFDMEQsVUFBVSxDQUFDdkQsQ0FBQyxDQUFDO0lBQy9Dc0QsSUFBSSxJQUFJLENBQUM7RUFDWDtFQUNBLE9BQU9FLElBQUksQ0FBQ0MsR0FBRyxDQUFDSCxJQUFJLENBQUMsQ0FBQ0ksUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNwQztBQUVBLFNBQVNDLG1CQUFtQkEsQ0FBQ0MsS0FBVSxFQUFpQjtFQUN0RCxJQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRLEVBQUU7SUFDN0IsT0FBT0EsS0FBSztFQUNkO0VBQ0EsSUFBSSxDQUFDQSxLQUFLLElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRTtJQUN2QyxPQUFPLElBQUk7RUFDYjtFQUNBLElBQUlBLEtBQUssQ0FBQ0MsSUFBSSxLQUFLLFFBQVEsRUFBRTtJQUMzQixNQUFNQyxNQUFNLEdBQUdILG1CQUFtQixDQUFDQyxLQUFLLENBQUNFLE1BQU0sQ0FBQztJQUNoRCxJQUFJLENBQUNBLE1BQU0sSUFBSSxPQUFPRixLQUFLLENBQUNHLE1BQU0sS0FBSyxRQUFRLEVBQUU7TUFDL0MsT0FBTyxJQUFJO0lBQ2I7SUFDQSxPQUFPLEdBQUdELE1BQU0sSUFBSUYsS0FBSyxDQUFDRyxNQUFNLEVBQUU7RUFDcEM7RUFDQSxPQUFPLElBQUk7QUFDYjtBQUVBLFNBQVNDLG1CQUFtQkEsQ0FBQ0MsR0FBUSxFQUF5QztFQUM1RSxJQUFJLENBQUNBLEdBQUcsSUFBSSxPQUFPQSxHQUFHLEtBQUssUUFBUSxFQUFFLE9BQU9DLFNBQVM7RUFDckQsSUFBSUQsR0FBRyxDQUFDSixJQUFJLEtBQUssUUFBUSxJQUFJSSxHQUFHLENBQUNKLElBQUksS0FBSyxLQUFLLElBQUlJLEdBQUcsQ0FBQ0osSUFBSSxLQUFLLE9BQU8sSUFBSUksR0FBRyxDQUFDSixJQUFJLEtBQUssU0FBUyxFQUFFO0lBQ2pHLE9BQU9JLEdBQUcsQ0FBQ3BFLEtBQUs7RUFDbEI7RUFDQSxJQUFJb0UsR0FBRyxDQUFDSixJQUFJLEtBQUssUUFBUSxFQUFFO0lBQ3pCLElBQ0VJLEdBQUcsQ0FBQ0UsVUFBVSxLQUFLLFFBQVEsSUFDM0JGLEdBQUcsQ0FBQ0UsVUFBVSxLQUFLLFFBQVEsSUFDM0JGLEdBQUcsQ0FBQ0UsVUFBVSxLQUFLLE9BQU8sSUFDMUJGLEdBQUcsQ0FBQ0UsVUFBVSxLQUFLLEtBQUssSUFDeEJGLEdBQUcsQ0FBQ0UsVUFBVSxLQUFLLFNBQVMsSUFDNUJGLEdBQUcsQ0FBQ0UsVUFBVSxLQUFLLE1BQU0sRUFDekI7TUFDQSxPQUFPRixHQUFHLENBQUNwRSxLQUFLO0lBQ2xCO0VBQ0Y7RUFDQSxPQUFPcUUsU0FBUztBQUNsQjtBQUVBLFNBQVNFLG9CQUFvQkEsQ0FBQ0gsR0FBUSxFQUFFSSxLQUFZLEdBQUcsRUFBRSxFQUFTO0VBQ2hFLElBQUksQ0FBQ0osR0FBRyxJQUFJLE9BQU9BLEdBQUcsS0FBSyxRQUFRLEVBQUU7SUFDbkMsT0FBT0ksS0FBSztFQUNkO0VBRUEsSUFBSUosR0FBRyxDQUFDSixJQUFJLEtBQUssT0FBTyxFQUFFO0lBQ3hCUSxLQUFLLENBQUNuRixJQUFJLENBQUM7TUFDVDJFLElBQUksRUFBRSxlQUFlO01BQ3JCUyxTQUFTLEVBQUUsT0FBTztNQUNsQkMsVUFBVSxFQUFFLENBQUM7UUFBRUMsU0FBUyxFQUFFLE9BQU87UUFBRTNFLEtBQUssRUFBRTtVQUFFZ0UsSUFBSSxFQUFFLEtBQUs7VUFBRWhFLEtBQUssRUFBRW9FLEdBQUcsQ0FBQ1E7UUFBTTtNQUFFLENBQUM7SUFDL0UsQ0FBQyxDQUFDO0lBQ0YsT0FBT0wsb0JBQW9CLENBQUNILEdBQUcsQ0FBQ0gsTUFBTSxFQUFFTyxLQUFLLENBQUM7RUFDaEQ7RUFFQSxJQUFJSixHQUFHLENBQUNKLElBQUksS0FBSyxRQUFRLEVBQUU7SUFDekIsSUFBSUksR0FBRyxDQUFDRixNQUFNLElBQUlFLEdBQUcsQ0FBQ0YsTUFBTSxDQUFDRixJQUFJLEtBQUssZUFBZSxFQUFFO01BQ3JEUSxLQUFLLENBQUNuRixJQUFJLENBQUMrRSxHQUFHLENBQUNGLE1BQU0sQ0FBQztJQUN4QjtJQUNBLE9BQU9LLG9CQUFvQixDQUFDSCxHQUFHLENBQUNILE1BQU0sRUFBRU8sS0FBSyxDQUFDO0VBQ2hEO0VBRUEsT0FBT0EsS0FBSztBQUNkO0FBRUEsU0FBU0ssWUFBWUEsQ0FBQ3RFLElBQVMsRUFBRXVFLFNBQWlCLEVBQW1CO0VBQ25FLElBQUksQ0FBQ3ZFLElBQUksSUFBSSxDQUFDd0UsS0FBSyxDQUFDQyxPQUFPLENBQUN6RSxJQUFJLENBQUNtRSxVQUFVLENBQUMsRUFBRSxPQUFPTCxTQUFTO0VBQzlELE1BQU1wQixLQUFLLEdBQUcxQyxJQUFJLENBQUNtRSxVQUFVLENBQUNPLElBQUksQ0FBRUMsS0FBVSxJQUFLQSxLQUFLLENBQUNQLFNBQVMsS0FBS0csU0FBUyxDQUFDO0VBQ2pGLE9BQU83QixLQUFLLEVBQUVqRCxLQUFLO0FBQ3JCO0FBRU8sU0FBU21GLHlCQUF5QkEsQ0FBQ2YsR0FBUSxFQUFzQjtFQUN0RSxNQUFNSSxLQUFLLEdBQUdELG9CQUFvQixDQUFDSCxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUNnQixPQUFPLENBQUMsQ0FBQztFQUNyRCxNQUFNQyxHQUEyQixHQUFHLEVBQUU7RUFFdEMsS0FBSyxNQUFNOUUsSUFBSSxJQUFJaUUsS0FBSyxFQUFFO0lBQ3hCLE1BQU1jLFFBQVEsR0FBRy9FLElBQUksRUFBRWtFLFNBQVM7SUFDaEMsSUFBSWEsUUFBUSxLQUFLLFVBQVUsSUFBSUEsUUFBUSxLQUFLLFVBQVUsSUFBSUEsUUFBUSxLQUFLLFFBQVEsRUFBRTtNQUMvRSxNQUFNQyxRQUFRLEdBQUdWLFlBQVksQ0FBQ3RFLElBQUksRUFBRSxPQUFPLENBQUM7TUFDNUMsTUFBTWlGLFFBQVEsR0FBR1gsWUFBWSxDQUFDdEUsSUFBSSxFQUFFLE9BQU8sQ0FBQztNQUM1QyxNQUFNa0YsU0FBUyxHQUFHM0IsbUJBQW1CLENBQUN5QixRQUFRLEVBQUV4QixLQUFLLENBQUM7TUFDdEQsTUFBTS9ELEtBQUssR0FBR21FLG1CQUFtQixDQUFDcUIsUUFBUSxDQUFDO01BQzNDLElBQUlDLFNBQVMsSUFBSXpGLEtBQUssS0FBS3FFLFNBQVMsRUFBRTtRQUNwQ2dCLEdBQUcsQ0FBQ2hHLElBQUksQ0FBQztVQUNQcUcsSUFBSSxFQUFFSixRQUFRO1VBQ2R2QixLQUFLLEVBQUUwQixTQUFTO1VBQ2hCekY7UUFDRixDQUFDLENBQUM7TUFDSjtNQUNBO0lBQ0Y7SUFFQSxJQUFJc0YsUUFBUSxLQUFLLFNBQVMsRUFBRTtNQUMxQixNQUFNQyxRQUFRLEdBQUdWLFlBQVksQ0FBQ3RFLElBQUksRUFBRSxPQUFPLENBQUM7TUFDNUMsTUFBTW9GLElBQUksR0FBR3hCLG1CQUFtQixDQUFDVSxZQUFZLENBQUN0RSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDNUQsTUFBTXFGLEVBQUUsR0FBR3pCLG1CQUFtQixDQUFDVSxZQUFZLENBQUN0RSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDeEQsTUFBTWtGLFNBQVMsR0FBRzNCLG1CQUFtQixDQUFDeUIsUUFBUSxFQUFFeEIsS0FBSyxDQUFDO01BQ3RELElBQUkwQixTQUFTLEtBQUtFLElBQUksS0FBS3RCLFNBQVMsSUFBSXVCLEVBQUUsS0FBS3ZCLFNBQVMsQ0FBQyxFQUFFO1FBQ3pEZ0IsR0FBRyxDQUFDaEcsSUFBSSxDQUFBRSxhQUFBLENBQUFBLGFBQUE7VUFDTm1HLElBQUksRUFBRSxTQUFTO1VBQ2YzQixLQUFLLEVBQUUwQjtRQUFTLEdBQ1pFLElBQUksS0FBS3RCLFNBQVMsR0FBRztVQUFFc0I7UUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ2xDQyxFQUFFLEtBQUt2QixTQUFTLEdBQUc7VUFBRXVCO1FBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNuQyxDQUFDO01BQ0o7TUFDQTtJQUNGO0lBRUEsSUFBSU4sUUFBUSxLQUFLLE1BQU0sRUFBRTtNQUN2QixNQUFNQyxRQUFRLEdBQUdWLFlBQVksQ0FBQ3RFLElBQUksRUFBRSxPQUFPLENBQUM7TUFDNUMsTUFBTXNGLFNBQVMsR0FBRzFCLG1CQUFtQixDQUFDVSxZQUFZLENBQUN0RSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDdEUsTUFBTWtGLFNBQVMsR0FBRzNCLG1CQUFtQixDQUFDeUIsUUFBUSxFQUFFeEIsS0FBSyxDQUFDO01BQ3RELElBQUkwQixTQUFTLEVBQUU7UUFDYkosR0FBRyxDQUFDaEcsSUFBSSxDQUFDO1VBQ1BxRyxJQUFJLEVBQUUsTUFBTTtVQUNaM0IsS0FBSyxFQUFFMEIsU0FBUztVQUNoQkksU0FBUyxFQUFFQSxTQUFTLEtBQUt4QixTQUFTLEdBQUcsSUFBSSxHQUFHeUIsT0FBTyxDQUFDRCxTQUFTO1FBQy9ELENBQUMsQ0FBQztNQUNKO01BQ0E7SUFDRjtJQUVBLElBQUlQLFFBQVEsS0FBSyxPQUFPLEVBQUU7TUFDeEIsTUFBTVYsS0FBSyxHQUFHVCxtQkFBbUIsQ0FBQ1UsWUFBWSxDQUFDdEUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQzlELElBQUksT0FBT3FFLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0JTLEdBQUcsQ0FBQ2hHLElBQUksQ0FBQztVQUNQcUcsSUFBSSxFQUFFLE9BQU87VUFDYjFGLEtBQUssRUFBRTRFO1FBQ1QsQ0FBQyxDQUFDO01BQ0o7TUFDQTtJQUNGO0lBRUEsSUFBSVUsUUFBUSxLQUFLLFFBQVEsRUFBRTtNQUN6QkQsR0FBRyxDQUFDaEcsSUFBSSxDQUFDO1FBQUVxRyxJQUFJLEVBQUU7TUFBUyxDQUFDLENBQUM7SUFDOUI7RUFDRjtFQUVBLElBQUlMLEdBQUcsQ0FBQzVGLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJO0VBRWpDLE1BQU1zRyxVQUFVLEdBQUdwRSxJQUFJLENBQUNFLFNBQVMsQ0FBQ3dELEdBQUcsQ0FBQztFQUN0QyxPQUFPO0lBQ0xBLEdBQUc7SUFDSDVCLElBQUksRUFBRUQsVUFBVSxDQUFDdUMsVUFBVTtFQUM3QixDQUFDO0FBQ0g7QUFFTyxNQUFNQyxvQkFBb0IsR0FBSUMsT0FBZSxJQUFLO0VBQ3ZELE9BQU8sTUFBTzVELEtBQVUsSUFBSztJQUMzQnpCLE9BQUEsQ0FBQUQsUUFBQSxHQUFBQSxRQUFRLEdBQUcsS0FBSztJQUNoQixJQUFBdUYsNkJBQWMsRUFBQzdELEtBQUssQ0FBQztJQUNyQixNQUFNOEQsTUFBTSxHQUFHLE1BQU1DLG1DQUFnQixDQUFDQyxjQUFjLENBQUNDLFNBQVMsQ0FBQ0wsT0FBTyxDQUFDO0lBQ3ZFO0lBQ0E7SUFDQXJGLE9BQUEsQ0FBQUQsUUFBQSxHQUFBQSxRQUFRLEdBQUcsSUFBSTtJQUNmLE9BQU93RixNQUFNO0VBQ2YsQ0FBQztBQUNILENBQUM7QUFBQ3ZGLE9BQUEsQ0FBQW9GLG9CQUFBLEdBQUFBLG9CQUFBO0FBRUYsTUFBTU8scUJBQXFCLEdBQUdBLENBQUNDLElBQVMsRUFBRUMsS0FBVSxLQUFLO0VBQ3ZELElBQUkxQixLQUFLLENBQUNDLE9BQU8sQ0FBQ3dCLElBQUksQ0FBQyxJQUFJekIsS0FBSyxDQUFDQyxPQUFPLENBQUN5QixLQUFLLENBQUMsRUFBRTtJQUMvQyxJQUFJRCxJQUFJLENBQUMvRyxNQUFNLEtBQUtnSCxLQUFLLENBQUNoSCxNQUFNLEVBQUU7TUFDaEMsT0FBTyxLQUFLO0lBQ2Q7SUFDQSxLQUFLLElBQUlVLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3FHLElBQUksQ0FBQy9HLE1BQU0sRUFBRVUsQ0FBQyxFQUFFLEVBQUU7TUFDcEMsSUFBSSxDQUFDb0cscUJBQXFCLENBQUNDLElBQUksQ0FBQ3JHLENBQUMsQ0FBQyxFQUFFc0csS0FBSyxDQUFDdEcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM3QyxPQUFPLEtBQUs7TUFDZDtJQUNGO0lBQ0EsT0FBTyxJQUFJO0VBQ2IsQ0FBQyxNQUFNO0lBQ0wsT0FBTyxJQUFBdUcsd0JBQVksRUFBQ0YsSUFBSSxFQUFFQyxLQUFLLENBQUM7RUFDbEM7QUFDRixDQUFDO0FBRUQsTUFBTUUsd0JBQXdCLEdBQUlDLEdBQVEsSUFBSztFQUM3QyxJQUFJN0IsS0FBSyxDQUFDQyxPQUFPLENBQUM0QixHQUFHLENBQUMsRUFBRTtJQUN0QixPQUFPQSxHQUFHLENBQUNDLEdBQUcsQ0FBRUMsT0FBTyxJQUFLSCx3QkFBd0IsQ0FBQ0csT0FBTyxDQUFDLENBQUM7RUFDaEUsQ0FBQyxNQUFNLElBQ0xGLEdBQUcsS0FBSyxJQUFJLElBQ1pBLEdBQUcsS0FBS3ZDLFNBQVMsSUFDakJ1QyxHQUFHLENBQUNHLFdBQVcsS0FBSzFDLFNBQVMsRUFDN0I7SUFDQSxPQUFPdUMsR0FBRztFQUNaLENBQUMsTUFBTSxJQUFJQSxHQUFHLENBQUNHLFdBQVcsQ0FBQ0MsU0FBUyxZQUFZQywwQkFBVyxFQUFFO0lBQzNELElBQUlMLEdBQUcsQ0FBQ0csV0FBVyxDQUFDQyxTQUFTLFlBQVlFLHdCQUFTLEVBQUU7TUFDbEQsT0FBQTNILGFBQUE7UUFDRTRILGlCQUFpQixFQUFFLFdBQVc7UUFDOUJDLGtCQUFrQixFQUFFUixHQUFHLENBQUNHLFdBQVcsQ0FBQ00sSUFBSTtRQUN4Q0MsZ0JBQWdCLEVBQUVWLEdBQUcsQ0FBQ0EsR0FBRyxDQUFDVyxRQUFRO01BQUMsR0FDaENYLEdBQUcsQ0FBQ1ksVUFBVSxDQUFDLENBQUM7SUFFdkIsQ0FBQyxNQUFNLElBQUlaLEdBQUcsQ0FBQ0csV0FBVyxDQUFDQyxTQUFTLFlBQVlTLDBCQUFXLEVBQUU7TUFDM0QsT0FBQWxJLGFBQUE7UUFDRTRILGlCQUFpQixFQUFFLGFBQWE7UUFDaENDLGtCQUFrQixFQUFFUixHQUFHLENBQUNHLFdBQVcsQ0FBQ007TUFBSSxHQUNyQ1QsR0FBRyxDQUFDYyxVQUFVO0lBRXJCO0lBQ0EsTUFBTSxJQUFJQyxLQUFLLENBQUMsMEJBQTBCLENBQUM7RUFDN0MsQ0FBQyxNQUFNO0lBQ0wsT0FBT2YsR0FBRztFQUNaO0FBQ0YsQ0FBQztBQUVNLE1BQU1nQixnQkFBZ0IsR0FBSUMsUUFBYSxJQUFLO0VBQ2pELElBQUlDLGNBQW1CLEdBQUd6RCxTQUFTO0VBQ25DLElBQUEwRCx1QkFBVyxFQUFFMUYsS0FBVSxJQUFLO0lBQzFCLElBQUE2RCw2QkFBYyxFQUFDN0QsS0FBSyxDQUFDO0lBQ3JCeUYsY0FBYyxHQUFHRCxRQUFRLENBQUN4RixLQUFLLENBQUM7SUFDaEMsT0FBT3NFLHdCQUF3QixDQUFDbUIsY0FBYyxDQUFDO0VBQ2pELENBQUMsRUFBRXZCLHFCQUFxQixDQUFDO0VBQ3pCLE9BQU91QixjQUFjO0FBQ3ZCLENBQUM7QUFBQ2xILE9BQUEsQ0FBQWdILGdCQUFBLEdBQUFBLGdCQUFBO0FBT0YsTUFBTUkseUJBQXlCLEdBQUcsR0FBRztBQUVyQyxTQUFTQyxZQUFZQSxDQUFDakksS0FBYSxFQUFFa0ksU0FBaUIsRUFBVTtFQUM5RCxJQUFJbEksS0FBSyxDQUFDUCxNQUFNLElBQUl5SSxTQUFTLEVBQUU7SUFDN0IsT0FBT2xJLEtBQUs7RUFDZDtFQUNBLE9BQU8sR0FBR0EsS0FBSyxDQUFDbUksS0FBSyxDQUFDLENBQUMsRUFBRXhFLElBQUksQ0FBQ3lFLEdBQUcsQ0FBQyxDQUFDLEVBQUVGLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDRyxPQUFPLENBQUMsQ0FBQyxHQUFHO0FBQ25FO0FBRUEsU0FBU0MsbUJBQW1CQSxDQUMxQkMsV0FBbUIsRUFDbkJDLFFBQWdCLEVBQ2hCeEUsSUFBa0MsR0FBRyxNQUFNLEVBQzNDeUUsV0FBVyxHQUFHLEtBQUssRUFDbkJDLE1BQW1DLEdBQUcsUUFBUSxFQUMzQjtFQUNuQixPQUFPO0lBQ0xILFdBQVc7SUFDWEMsUUFBUTtJQUNSeEUsSUFBSTtJQUNKeUUsV0FBVztJQUNYQyxNQUFNO0lBQ05DLE9BQU8sRUFBRUg7RUFDWCxDQUFDO0FBQ0g7QUFFQSxTQUFTSSx1QkFBdUJBLENBQzlCOUcsS0FBMkIsRUFDM0I0RyxNQUFtQyxFQUNuQ0csb0JBQTZCLEVBQ1Y7RUFDbkIsT0FBTztJQUNMTixXQUFXLEVBQUV6RyxLQUFLLENBQUN5RyxXQUFXO0lBQzlCQyxRQUFRLEVBQUUxRyxLQUFLLENBQUMwRyxRQUFRO0lBQ3hCeEUsSUFBSSxFQUFFbEMsS0FBSyxDQUFDa0MsSUFBSTtJQUNoQnlFLFdBQVcsRUFBRTNHLEtBQUssQ0FBQzJHLFdBQVcsSUFBSUksb0JBQW9CO0lBQ3RESCxNQUFNO0lBQ05DLE9BQU8sRUFBRTdHLEtBQUssQ0FBQzBHO0VBQ2pCLENBQUM7QUFDSDtBQUVBLFNBQVNNLGtCQUFrQkEsQ0FBQzlJLEtBQWMsRUFBVTtFQUNsRCxJQUFJQSxLQUFLLEtBQUssSUFBSSxJQUFJQSxLQUFLLEtBQUtxRSxTQUFTLEVBQUU7SUFDekMsT0FBTyxNQUFNO0VBQ2Y7RUFDQSxNQUFNMEIsVUFBVSxHQUFHdEYsTUFBTSxDQUFDVCxLQUFLLENBQUM7RUFDaEMsT0FBT2lJLFlBQVksQ0FBQ2xDLFVBQVUsRUFBRWlDLHlCQUF5QixDQUFDO0FBQzVEO0FBRUEsU0FBU2UsaUJBQWlCQSxDQUFDNUMsTUFBVyxFQUFFNkMsTUFBYyxFQUFFO0VBQ3RELElBQUksQ0FBQzdDLE1BQU0sSUFBSSxPQUFPQSxNQUFNLEtBQUssUUFBUSxFQUFFO0lBQ3pDLE9BQU87TUFDTDZDLE1BQU07TUFDTkMsTUFBTSxFQUFFLFNBQVM7TUFDakJDLFVBQVUsRUFBRTtJQUNkLENBQUM7RUFDSDtFQUVBLElBQUkvQyxNQUFNLENBQUNuQyxJQUFJLEtBQUssT0FBTyxFQUFFO0lBQzNCLE1BQU1tRixNQUFNLEdBQUdwRSxLQUFLLENBQUNDLE9BQU8sQ0FBQ21CLE1BQU0sQ0FBQ25HLEtBQUssQ0FBQyxHQUFHbUcsTUFBTSxDQUFDbkcsS0FBSyxHQUFHLEVBQUU7SUFDOUQsTUFBTW9KLEtBQUssR0FBR0QsTUFBTSxDQUFDMUosTUFBTSxHQUFHLENBQUMsR0FBRzBKLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO0lBQ2xELE1BQU1FLGVBQWUsR0FBR0QsS0FBSyxFQUFFOUUsVUFBVSxJQUFJLElBQUk7SUFDakQsTUFBTWdGLFlBQVksR0FDaEJGLEtBQUssSUFBSUEsS0FBSyxDQUFDcEYsSUFBSSxLQUFLLFFBQVEsR0FDNUI4RSxrQkFBa0IsQ0FBQ00sS0FBSyxDQUFDcEosS0FBSyxDQUFDLEdBQy9CLElBQUk7SUFFVixPQUFPO01BQ0xnSixNQUFNO01BQ05DLE1BQU0sRUFBRSxJQUFJO01BQ1pDLFVBQVUsRUFBRSxPQUFPO01BQ25CSyxLQUFLLEVBQUVKLE1BQU0sQ0FBQzFKLE1BQU07TUFDcEI0SixlQUFlO01BQ2ZDO0lBQ0YsQ0FBQztFQUNIO0VBRUEsSUFBSW5ELE1BQU0sQ0FBQ25DLElBQUksS0FBSyxRQUFRLEVBQUU7SUFDNUIsT0FBTztNQUNMZ0YsTUFBTTtNQUNOQyxNQUFNLEVBQUUsSUFBSTtNQUNaQyxVQUFVLEVBQUUsUUFBUTtNQUNwQjVFLFVBQVUsRUFBRTZCLE1BQU0sQ0FBQzdCLFVBQVUsSUFBSSxTQUFTO01BQzFDa0YsT0FBTyxFQUFFVixrQkFBa0IsQ0FBQzNDLE1BQU0sQ0FBQ25HLEtBQUs7SUFDMUMsQ0FBQztFQUNIO0VBRUEsT0FBTztJQUNMZ0osTUFBTTtJQUNOQyxNQUFNLEVBQUUsSUFBSTtJQUNaQyxVQUFVLEVBQUU7RUFDZCxDQUFDO0FBQ0g7QUFFTyxlQUFlTyxnQkFBZ0JBLENBQ3BDeEQsT0FBZ0IsRUFDaEJ5RCxPQUdDLEdBQUcsQ0FBQyxDQUFDLEVBQ29CO0VBQ3hCLE1BQU1DLFNBQVMsR0FDYixPQUFPMUQsT0FBTyxLQUFLLFFBQVEsR0FBR0EsT0FBTyxDQUFDMkQsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0VBQ25ELE1BQU1DLGFBQWEsR0FBR0gsT0FBTyxDQUFDaEIsTUFBTSxJQUFJLFFBQVE7RUFDaEQsTUFBTW9CLGlCQUFpQixHQUFHaEUsT0FBTyxDQUFDNEQsT0FBTyxDQUFDSSxpQkFBaUIsQ0FBQztFQUM1RDs7RUFFQSxJQUFJLENBQUNILFNBQVMsRUFBRTtJQUNkLElBQUFJLDRCQUFhLEVBQUMsTUFBTTtNQUNsQixNQUFNQyxlQUFlLEdBQUdDLDBCQUE4QjtNQUN0REQsZUFBZSxDQUFDckIsT0FBTyxHQUFHTCxtQkFBbUIsQ0FDM0Msd0JBQXdCLEVBQ3hCLHlEQUF5RCxFQUN6RCxNQUFNLEVBQ053QixpQkFBaUIsRUFDakJELGFBQ0YsQ0FBQztJQUNILENBQUMsQ0FBQztJQUNGLE9BQU87TUFDTEssT0FBTyxFQUFFLEtBQUs7TUFDZEMsT0FBTyxFQUFFLENBQUMsSUFBSXhDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztJQUM5QyxDQUFDO0VBQ0g7O0VBRUE7RUFDQSxJQUFJLENBQUN2QixtQ0FBZ0IsSUFBSSxDQUFDQSxtQ0FBZ0IsQ0FBQ0MsY0FBYyxFQUFFO0lBQ3pEdEUsY0FBTSxDQUFDRCxLQUFLLENBQUMscUNBQXFDLENBQUM7SUFDbkQsSUFBQWlJLDRCQUFhLEVBQUMsTUFBTTtNQUNsQixNQUFNQyxlQUFlLEdBQUdDLDBCQUE4QjtNQUN0REQsZUFBZSxDQUFDckIsT0FBTyxHQUFHTCxtQkFBbUIsQ0FDM0MsbUJBQW1CLEVBQ25CLHFDQUFxQyxFQUNyQyxPQUFPLEVBQ1B3QixpQkFBaUIsRUFDakJELGFBQ0YsQ0FBQztJQUNILENBQUMsQ0FBQztJQUNGLE9BQU87TUFDTEssT0FBTyxFQUFFLEtBQUs7TUFDZEMsT0FBTyxFQUFFLENBQUMsSUFBSXhDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQztJQUN6RCxDQUFDO0VBQ0g7RUFFQSxJQUFJO0lBQ0YsTUFBTXhCLE1BQU0sR0FDVixNQUFNQyxtQ0FBZ0IsQ0FBQ0MsY0FBYyxDQUFDK0QsY0FBYyxDQUFDVCxTQUFTLENBQUM7SUFDakU7SUFDQSxPQUFPO01BQ0xPLE9BQU8sRUFBRSxJQUFJO01BQ2JDLE9BQU8sRUFBRWhFO0lBQ1gsQ0FBQztFQUNILENBQUMsQ0FBQyxPQUFPeEgsQ0FBQyxFQUFFO0lBQ1ZvRCxjQUFNLENBQUNELEtBQUssQ0FBQywwQkFBMEIsRUFBRTZILFNBQVMsRUFBRWhMLENBQUMsQ0FBQztJQUN0RCxJQUFBb0wsNEJBQWEsRUFBQyxNQUFNO01BQ2xCLE1BQU1DLGVBQWUsR0FBR0MsMEJBQThCO01BQ3RERCxlQUFlLENBQUNyQixPQUFPLEdBQUcsSUFBQTBCLDhCQUFzQixFQUFDMUwsQ0FBQyxDQUFDLEdBQy9DaUssdUJBQXVCLENBQUNqSyxDQUFDLEVBQUVrTCxhQUFhLEVBQUVDLGlCQUFpQixDQUFDLEdBQzVEeEIsbUJBQW1CLENBQ2pCLDJCQUEyQixFQUMzQiw4QkFBOEIsRUFDOUIsT0FBTyxFQUNQd0IsaUJBQWlCLEVBQ2pCRCxhQUNGLENBQUM7SUFDUCxDQUFDLENBQUM7SUFDRixPQUFPO01BQ0xLLE9BQU8sRUFBRSxLQUFLO01BQ2RDLE9BQU8sRUFBRSxDQUFDeEwsQ0FBQztJQUNiLENBQUM7RUFDSDtBQUNKO0FBRU8sU0FBUzJMLGFBQWFBLENBQzNCQyxlQUFnQyxFQUNoQ0MsVUFBa0IsRUFDbEJ4QixNQUFjLEVBQ2R5QixlQUFxQyxFQUNyQztFQUNBLElBQUFWLDRCQUFhLEVBQUMsTUFBTTtJQUNsQixJQUFJVyxvQkFBb0IsR0FBRyxFQUFFO0lBQzdCLElBQUlDLGdCQUFnQixHQUFHLElBQUk7SUFDM0IsSUFBSUMsb0JBQW9CLEdBQUcsRUFBRTtJQUU3QixNQUFNQyxlQUFlLEdBQUdOLGVBQWUsQ0FBQ0osT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNVyxZQUFZLEdBQUdELGVBQWUsRUFBRXpHLEdBQUc7SUFDekMsTUFBTTJHLFdBQXdDLEdBQzVDRixlQUFlLENBQUMsT0FBTyxDQUFDO0lBQzFCLE1BQU1HLFdBQVcsR0FBRzdGLHlCQUF5QixDQUFDMkYsWUFBWSxDQUFDO0lBQzNELElBQUlHLFVBQVUsR0FBRyxJQUFJO0lBRXJCLEtBQUssSUFBSTlLLENBQUMsR0FBRzRLLFdBQVcsQ0FBQ3RMLE1BQU0sR0FBRyxDQUFDLEVBQUVVLENBQUMsSUFBSSxDQUFDLEVBQUVBLENBQUMsRUFBRSxFQUFFO01BQ2hELElBQUlBLENBQUMsSUFBSTRLLFdBQVcsQ0FBQ3RMLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDL0J3TCxVQUFVLEdBQUcsS0FBSztNQUNwQjtNQUNBLE1BQU1DLElBQUksR0FBR0gsV0FBVyxDQUFDNUssQ0FBQyxDQUFDO01BQzNCdUssb0JBQW9CLEdBQUcsRUFBRTtNQUN6QjtNQUNBLE1BQU1TLFVBQVUsR0FBR0QsSUFBSSxDQUFDL0UsTUFBTTtNQUM5QixJQUFJZ0YsVUFBVSxDQUFDbkgsSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUNoQzBHLG9CQUFvQixDQUFDckwsSUFBSSxDQUFDOEwsVUFBVSxDQUFDO01BQ3ZDLENBQUMsTUFBTSxJQUFJQSxVQUFVLENBQUNuSCxJQUFJLEtBQUssT0FBTyxFQUFFO1FBQ3RDLEtBQUssTUFBTThDLE9BQU8sSUFBSXFFLFVBQVUsQ0FBQ25MLEtBQUssRUFBRTtVQUN0QzBLLG9CQUFvQixDQUFDckwsSUFBSSxDQUFDeUgsT0FBTyxDQUFDO1FBQ3BDO01BQ0Y7TUFDQSxNQUFNc0UsWUFBWSxHQUNoQlYsb0JBQW9CLENBQUNqTCxNQUFNLEdBQUcsQ0FBQyxHQUFHaUwsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMxSyxLQUFLLEdBQUcsSUFBSTtNQUN4RTtNQUNBLElBQUkwSyxvQkFBb0IsQ0FBQ2pMLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckNtTCxvQkFBb0IsR0FBR0Ysb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUNwRyxVQUFVO1FBQ3pEcUcsZ0JBQWdCLEdBQUdELG9CQUFvQixDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUNFVSxZQUFZLElBQ1p0TSxNQUFNLENBQUN1TSxNQUFNLENBQUNYLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUMvQzVMLE1BQU0sQ0FBQ3VNLE1BQU0sQ0FBQ0QsWUFBWSxFQUFFLFlBQVksQ0FBQyxJQUN6Q1Ysb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMxSyxLQUFLLENBQUMwSCxVQUFVLENBQUNQLGlCQUFpQixLQUN4RCxhQUFhLEVBQ2Y7VUFDQXlELG9CQUFvQixHQUFHLFdBQVc7VUFDbENELGdCQUFnQixHQUFHLElBQUk7UUFDekI7TUFDRixDQUFDLE1BQU0sSUFBSUQsb0JBQW9CLENBQUNqTCxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzFDbUwsb0JBQW9CLEdBQUdGLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDcEcsVUFBVSxHQUFHLElBQUk7UUFDaEVxRyxnQkFBZ0IsR0FBR0Qsb0JBQW9CO1FBQ3ZDLElBQ0VVLFlBQVksSUFDWnRNLE1BQU0sQ0FBQ3VNLE1BQU0sQ0FBQ1gsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQy9DNUwsTUFBTSxDQUFDdU0sTUFBTSxDQUFDRCxZQUFZLEVBQUUsWUFBWSxDQUFDLElBQ3pDVixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzFLLEtBQUssQ0FBQzBILFVBQVUsQ0FBQ1AsaUJBQWlCLEtBQ3hELGFBQWEsRUFDZjtVQUNBeUQsb0JBQW9CLEdBQUcsV0FBVztVQUNsQ0QsZ0JBQWdCLEdBQUcsSUFBSTtRQUN6QjtNQUNGLENBQUMsTUFBTSxJQUFJRCxvQkFBb0IsQ0FBQ2pMLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDNUNtTCxvQkFBb0IsR0FBRyxXQUFXO1FBQ2xDRCxnQkFBZ0IsR0FBRyxJQUFJO01BQ3pCO01BQ0E7TUFDQSxJQUFJVyx5Q0FBd0IsQ0FBQ0MsY0FBYyxDQUFDQyxHQUFHLENBQUNaLG9CQUFvQixDQUFDLEVBQUU7UUFDckU7TUFDRjtJQUNGO0lBQ0EsSUFBSWEsYUFBYSxHQUFHLEtBQUs7SUFDekIsSUFBSUMsUUFBUSxHQUFHLElBQUk7SUFDbkIsSUFBSUMsNEJBQTRCLEdBQUcsSUFBSTtJQUN2QyxJQUFJaEIsZ0JBQWdCLElBQUksSUFBSSxFQUFFO01BQzVCO01BQ0EsSUFBSUEsZ0JBQWdCLFlBQVk1RixLQUFLLEVBQUU7UUFDckM7UUFDQTJHLFFBQVEsR0FBRyxLQUFLO1FBQ2hCQyw0QkFBNEIsR0FBRyxFQUFFO1FBQ2pDLEtBQUssTUFBTTdFLE9BQU8sSUFBSTZELGdCQUFnQixFQUFFO1VBQ3RDLE1BQU1pQixRQUFRLEdBQUcsSUFBQUMsdUNBQXNCLEVBQUM7WUFDdENDLFNBQVMsRUFBRWhGLE9BQU8sQ0FBQ3hDLFVBQVU7WUFDN0JuRCxHQUFHLEVBQUUyRixPQUFPLENBQUM5RztVQUNmLENBQUMsQ0FBQztVQUNGLElBQUk0TCxRQUFRLEtBQUt2SCxTQUFTLEVBQUU7WUFDMUJvSCxhQUFhLEdBQUcsSUFBSTtZQUNwQjtVQUNGO1VBQ0FFLDRCQUE0QixDQUFDdE0sSUFBSSxDQUFDdU0sUUFBUSxDQUFDO1FBQzdDO01BQ0YsQ0FBQyxNQUFNO1FBQ0wsTUFBTUEsUUFBUSxHQUFHLElBQUFDLHVDQUFzQixFQUFDO1VBQ3RDQyxTQUFTLEVBQUVuQixnQkFBZ0IsQ0FBQ3JHLFVBQVU7VUFDdENuRCxHQUFHLEVBQUV3SixnQkFBZ0IsQ0FBQzNLO1FBQ3hCLENBQUMsQ0FBQztRQUNGLElBQUk0TCxRQUFRLEtBQUt2SCxTQUFTLEVBQUVvSCxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQzVDO1VBQ0gsSUFBSVIsVUFBVSxFQUFFO1lBQ2Q7WUFDQVMsUUFBUSxHQUFHLEtBQUs7VUFDbEIsQ0FBQyxNQUFNO1lBQ0w7WUFDQSxNQUFNSyxlQUFlLEdBQUd0QixlQUFlLENBQUN4RixJQUFJLENBQ3pDK0csY0FBYyxJQUNiQSxjQUFjLENBQUNGLFNBQVMsS0FBS0YsUUFBUSxDQUFDN0UsV0FBVyxDQUFDTSxJQUFJLElBQ3RELElBQUFYLHdCQUFZLEVBQ1ZzRixjQUFjLENBQUM3SyxHQUFHLEVBQ2xCeUssUUFBUSxDQUFDNUsscUJBQXFCLENBQUMsQ0FDakMsQ0FDSixDQUFDO1lBQ0QsSUFBSSxDQUFDK0ssZUFBZSxFQUFFO2NBQ3BCTCxRQUFRLEdBQUcsS0FBSztZQUNsQjtVQUNGO1VBRUFDLDRCQUE0QixHQUFHQyxRQUFRO1FBQ3pDO01BQ0Y7SUFDRjtJQUNBeEYsbUNBQWdCLENBQUM2RixRQUFRLENBQ3RCQyxPQUFPLENBQ04xQixVQUFVLEVBQ1Z4QixNQUFNLEVBQ05ySCxJQUFJLENBQUNFLFNBQVMsQ0FDWmtILGlCQUFpQjtJQUNmO0lBQ0F3QixlQUFlLENBQUNKLE9BQU8sQ0FBQ0ksZUFBZSxDQUFDSixPQUFPLENBQUMxSyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMwRyxNQUFNLEVBQ2xFNkMsTUFDRixDQUNGLENBQ0YsQ0FBQyxDQUNBbUQsSUFBSSxDQUFFaEcsTUFBTSxJQUFLO01BQ2hCaUcsT0FBTyxDQUFDQyxHQUFHLENBQUMsbUJBQW1CbEcsTUFBTSxFQUFFLENBQUM7TUFDeEMsSUFBQTRELDRCQUFhLEVBQUMsTUFBTTtRQUNsQixNQUFNQyxlQUFlLEdBQUdDLDBCQUE4QjtRQUN0RCxJQUFJOUQsTUFBTSxLQUFLLElBQUksRUFBRTtVQUNuQjZELGVBQWUsQ0FBQ3JCLE9BQU8sR0FBQXBKLGFBQUEsQ0FBQUEsYUFBQSxLQUNsQjRHLE1BQU07WUFDVHVDLE1BQU0sRUFBRSxPQUFPO1lBQ2ZDLE9BQU8sRUFBRXhDLE1BQU0sQ0FBQ3FDO1VBQVEsRUFDekI7UUFDSDtRQUVBLElBQUk4RCxXQUFxQyxHQUFHLElBQUk7UUFDaEQsSUFBSSxDQUFDYixhQUFhLElBQUlmLG9CQUFvQixDQUFDakwsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUNyRCxNQUFNOE0sd0JBQXdCLEdBQUc3QixvQkFBb0IsQ0FDbEQ3RCxHQUFHLENBQUU4RCxnQkFBZ0IsSUFDcEIxSSx3Q0FBd0MsQ0FBQzBJLGdCQUFnQixDQUFDM0ssS0FBSyxDQUNqRSxDQUFDLENBQ0FkLE1BQU0sQ0FDSnNOLE1BQU0sSUFDTEEsTUFBTSxLQUFLLElBQUksSUFBSSxPQUFPQSxNQUFNLEtBQUssUUFDekMsQ0FBQztVQUVILElBQUlELHdCQUF3QixDQUFDOU0sTUFBTSxHQUFHLENBQUMsSUFBSW1MLG9CQUFvQixFQUFFO1lBQy9ELE1BQU02QixnQkFBZ0IsR0FBR3pDLGVBQWUsQ0FBQzBDLFFBQVEsR0FBRyxDQUFDO1lBQ3JESixXQUFXLEdBQUdqSixvQkFBb0IsQ0FBQzJHLGVBQWUsRUFBRTtjQUNsRDFHLE9BQU8sRUFBRW1KLGdCQUFnQjtjQUN6QkUsZ0JBQWdCLEVBQUUvQixvQkFBb0I7Y0FDdEMyQjtZQUNGLENBQUMsQ0FBQztVQUNKO1FBQ0Y7UUFFQSxJQUFJLENBQUNiLFFBQVEsSUFBSSxDQUFDRCxhQUFhLEVBQUU7VUFDL0J6QixlQUFlLENBQUM0QyxRQUFRLEdBQUc7WUFDekJDLG1CQUFtQixFQUFFdkIseUNBQXdCLENBQUN3QixhQUFhLENBQ3pEbkIsNEJBQ0YsQ0FBQyxDQUFDb0IsYUFBYTtZQUNmQyx1QkFBdUIsRUFDckJ0QyxvQkFBb0IsQ0FBQ2pMLE1BQU0sS0FBSyxDQUFDLEdBQzdCaUwsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMxSyxLQUFLLENBQUNnQixxQkFBcUIsQ0FBQyxDQUFDLEdBQ3JEO2NBQ0VpTSxRQUFRLEVBQUV2QyxvQkFBb0IsQ0FBQzdELEdBQUcsQ0FBRThELGdCQUFnQixJQUNsREEsZ0JBQWdCLENBQUMzSyxLQUFLLENBQUNnQixxQkFBcUIsQ0FBQyxDQUMvQztZQUNGLENBQUM7WUFDUGdLLFdBQVc7WUFDWGhJLFNBQVMsRUFBRXNKLFdBQVcsRUFBRXRKLFNBQVMsSUFBSSxJQUFJO1lBQ3pDMkosZ0JBQWdCLEVBQUUvQixvQkFBb0IsSUFBSTtVQUM1QyxDQUFDO1VBQ0RaLGVBQWUsQ0FBQzBDLFFBQVEsSUFBSSxDQUFDO1FBQy9CO01BQ0YsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQ0RRLEtBQUssQ0FBRXBMLEtBQUssSUFBSztNQUNoQkMsY0FBTSxDQUFDRCxLQUFLLENBQUMsNEJBQTRCLEVBQUVBLEtBQUssQ0FBQztNQUNqRCxJQUFBaUksNEJBQWEsRUFBQyxNQUFNO1FBQ2xCLE1BQU1DLGVBQWUsR0FBR0MsMEJBQThCO1FBQ3RERCxlQUFlLENBQUNyQixPQUFPLEdBQUdMLG1CQUFtQixDQUMzQyxPQUFPLEVBQ1AsT0FBTyxFQUNQLE1BQU0sRUFDTixLQUNGLENBQUM7TUFDSCxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7O0lBRUo7RUFDRixDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVM2RSxvQkFBb0JBLENBQUEsRUFBRztFQUNyQyxJQUFBcEQsNEJBQWEsRUFBQyxNQUFNO0lBQ2xCLE1BQU1DLGVBQWUsR0FBR0MsMEJBQThCO0lBQ3RERCxlQUFlLENBQUM0QyxRQUFRLEdBQUc7TUFDekJDLG1CQUFtQixFQUFFLElBQUk7TUFDekJHLHVCQUF1QixFQUFFLElBQUk7TUFDN0JoQyxXQUFXLEVBQUUsSUFBSTtNQUNqQmhJLFNBQVMsRUFBRSxJQUFJO01BQ2YySixnQkFBZ0IsRUFBRTtJQUNwQixDQUFDO0VBQ0gsQ0FBQyxDQUFDO0FBQ0oiLCJpZ25vcmVMaXN0IjpbXX0=
594
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9kYWxpdHlQcm92aWRlclYiLCJyZXF1aXJlIiwiX3JlYWN0RGVjb3JhdG9ycyIsIl9yZWFjdFJlZHV4IiwiX3JlYWN0Z2VuaWVEc2wiLCJfbG9nZ2VyIiwiX2Vycm9ycyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwidWlBY3RpdmUiLCJleHBvcnRzIiwiREVGQVVMVF9SRVNVTFRfV0lORE9XX01BWCIsIkRFRkFVTFRfUkVTVUxUX1dJTkRPV19UVExfTVMiLCJnZXRDb25zdHJ1Y3RvclBhcmFtc0Zyb21SZXN1bHRWYWx1ZSIsIl9nZXRDb25zdHJ1Y3RvclBhcmFtcyIsImRlZXBGcmVlemVPYmplY3QiLCJmcmVlemUiLCJrZXkiLCJuZXN0ZWQiLCJpc0Zyb3plbiIsImNsb25lRGV0YWNoZWRWYWx1ZSIsIm5hdGl2ZVN0cnVjdHVyZWRDbG9uZSIsImdsb2JhbFRoaXMiLCJzdHJ1Y3R1cmVkQ2xvbmUiLCJjbG9uZWQiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJlcnJvciIsImxvZ2dlciIsIndhcm4iLCJjcmVhdGVJbW11dGFibGVDb25zdHJ1Y3RvclBhcmFtc1NuYXBzaG90IiwiY29uc3RydWN0b3JQYXJhbXMiLCJzbmFwc2hvdCIsImVuc3VyZVJlc3VsdFdpbmRvd0RlZmF1bHRzIiwic3RhdGUiLCJyZXN1bHRXaW5kb3dCeVJlZiIsInJlc3VsdFdpbmRvd09yZGVyIiwicmVzdWx0V2luZG93TWF4IiwicmVzdWx0V2luZG93VHRsTXMiLCJpc0Zpbml0ZSIsInJlc3VsdFdpbmRvd1NlcXVlbmNlIiwicHJ1bmVSZXN1bHRXaW5kb3ciLCJub3ciLCJEYXRlIiwibWluQ3JlYXRlZEF0IiwicmVzdWx0UmVmIiwiZW50cnkiLCJjcmVhdGVkQXQiLCJvbGRlc3RSZWYiLCJzaGlmdCIsInB1dFJlc3VsdFdpbmRvd0VudHJ5IiwiZXZlbnRJZCIsImNvbXBsZXRlRW50cnkiLCJoYXNoU3RyaW5nIiwiaGFzaCIsImNoYXJDb2RlQXQiLCJNYXRoIiwiYWJzIiwidG9TdHJpbmciLCJhY2Nlc3NvckZpZWxkVG9QYXRoIiwiZmllbGQiLCJ0eXBlIiwicGFyZW50IiwiYWNjZXNzIiwiYXN0VmFsdWVUb1ByaW1pdGl2ZSIsImFzdCIsInVuZGVmaW5lZCIsIm9iamVjdFR5cGUiLCJjb2xsZWN0RnVuY3Rpb25DYWxscyIsImNhbGxzIiwiZnVuY19uYW1lIiwicGFyYW1ldGVycyIsInBhcmFtZXRlciIsImluZGV4IiwiZ2V0Q2FsbFBhcmFtIiwicGFyYW1OYW1lIiwiQXJyYXkiLCJpc0FycmF5IiwiZmluZCIsInBhcmFtIiwiZXh0cmFjdFF1ZXJ5SW50ZW50RnJvbUFzdCIsInJldmVyc2UiLCJvcHMiLCJmdW5jTmFtZSIsImZpZWxkQXN0IiwidmFsdWVBc3QiLCJmaWVsZFBhdGgiLCJraW5kIiwiZnJvbSIsInRvIiwiYXNjZW5kaW5nIiwiQm9vbGVhbiIsInNlcmlhbGl6ZWQiLCJ1c2VHZW5pZUNvZGVTZWxlY3RvciIsImNvbW1hbmQiLCJzZXRTaGFyZWRTdGF0ZSIsInJlc3VsdCIsIkdlbmllSW50ZXJwcmV0ZXIiLCJkc2xJbnRlcnByZXRlciIsImludGVycHJldCIsInNoYWxsb3dFcXVhbFdpdGhBcnJheSIsImxlZnQiLCJyaWdodCIsInNoYWxsb3dFcXVhbCIsImNvbnZlcnRHZW5pZUNsYXNzVG9TdGF0ZSIsIm9iaiIsIm1hcCIsImVsZW1lbnQiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIkdlbmllT2JqZWN0IiwiRGF0YUNsYXNzIiwiX19nZW5pZU9iamVjdFR5cGUiLCJfX2dlbmllT2JqZWN0Q2xhc3MiLCJnZXRTdGFibGVHZW5pZU9iamVjdENsYXNzTmFtZSIsIl9fZ2VuaWVPYmplY3RLZXkiLCJnZW5pZUtleSIsIl9fZ2V0U3RhdGUiLCJIZWxwZXJDbGFzcyIsImxvY2FsU3RvcmUiLCJFcnJvciIsInVzZUdlbmllU2VsZWN0b3IiLCJzZWxlY3RvciIsInNlbGVjdG9yUmVzdWx0IiwidXNlU2VsZWN0b3IiLCJSRVNVTFRfUFJFVklFV19NQVhfTEVOR1RIIiwidHJ1bmNhdGVUZXh0IiwibWF4TGVuZ3RoIiwic2xpY2UiLCJtYXgiLCJ0cmltRW5kIiwiY3JlYXRlU3lzdGVtTWVzc2FnZSIsIm1pbmltYWxUZXh0IiwiZnVsbFRleHQiLCJzaG91bGRTcGVhayIsIm9yaWdpbiIsIm1lc3NhZ2UiLCJjcmVhdGVVc2VyRmFjaW5nTWVzc2FnZSIsInNob3VsZFNwZWFrQnlEZWZhdWx0Iiwic2FmZVNlcmlhbGl6ZVZhbHVlIiwiYnVpbGRSZXN1bHREaWdlc3QiLCJwYXJzZWQiLCJzdGF0dXMiLCJyZXN1bHRUeXBlIiwidmFsdWVzIiwiZmlyc3QiLCJmaXJzdE9iamVjdFR5cGUiLCJmaXJzdFByZXZpZXciLCJjb3VudCIsInByZXZpZXciLCJleGVjdXRlR2VuaWVDb2RlIiwib3B0aW9ucyIsInNhbml0aXplZCIsInRyaW0iLCJtZXNzYWdlT3JpZ2luIiwic2hvdWxkU3BlYWtFcnJvcnMiLCJnZW5pZURpc3BhdGNoIiwicmVhY3RHZW5pZVN0YXRlIiwic2hhcmVkU3RhdGUiLCJzdWNjZXNzIiwicmVzdWx0cyIsImludGVycHJldFN0ZXBzIiwiaXNHZW5pZVVzZXJGYWNpbmdFcnJvciIsImRpc3BsYXlSZXN1bHQiLCJleGVjdXRpb25SZXN1bHQiLCJ0cmFuc2NyaXB0IiwiZ2VuaWVJbnRlcmZhY2VzIiwiYWxsRGlzcGxheWluZ09iamVjdHMiLCJkaXNwbGF5aW5nT2JqZWN0IiwiZGlzcGxheWluZ09iamVjdFR5cGUiLCJzdGF0ZW1lbnRSZXN1bHQiLCJzdGF0ZW1lbnRBc3QiLCJyZXN1bHRTdGVwcyIsInF1ZXJ5SW50ZW50IiwibGFzdFJlc3VsdCIsInN0ZXAiLCJzdGVwUmVzdWx0IiwicHJpbWFyeVZhbHVlIiwiaGFzT3duIiwiQWxsR2VuaWVPYmplY3RJbnRlcmZhY2VzIiwic3VwcG9ydGVkVHlwZXMiLCJoYXMiLCJjYW5ub3RkaXNwbGF5Iiwib25TY3JlZW4iLCJpbnN0YW50aWF0ZWREaXNwbGF5aW5nT2JqZWN0IiwiSW5zdGFuY2UiLCJJbnN0YW50aWF0ZUdlbmllT2JqZWN0IiwiY2xhc3NOYW1lIiwiaW5zdGFuY2VDbGFzc05hbWUiLCJ0YXJnZXRJbnRlcmZhY2UiLCJnZW5pZUludGVyZmFjZSIsIm5sUGFyc2VyIiwicmVzcG9uZCIsInRoZW4iLCJjb25zb2xlIiwibG9nIiwicmVzdWx0RW50cnkiLCJvcmRlcmVkQ29uc3RydWN0b3JQYXJhbXMiLCJwYXJhbXMiLCJwcmVkaWN0ZWRFdmVudElkIiwibmF2U3RhY2siLCJyZXN1bHRPYmplY3RUeXBlIiwiZ2V0SW50ZXJmYWNlcyIsIm5hdlN0YXRlIiwib2JqZWN0Vmlld0NsYXNzTmFtZSIsInZpZXdDbGFzc05hbWUiLCJvYmplY3RDb25zdHJ1Y3RvclBhcmFtcyIsImVsZW1lbnRzIiwiY2F0Y2giLCJyZXNldEdlbmllTmF2aWdhdGlvbiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9zaGFyZWQtc3RvcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VuaWVJbnRlcnByZXRlciB9IGZyb20gXCIuL21vZGFsaXR5LXByb3ZpZGVyLXYyXCI7XG5pbXBvcnQge1xuICBBbGxHZW5pZU9iamVjdEludGVyZmFjZXMsXG4gIEdlbmllSW50ZXJmYWNlU3BlYyxcbiAgSW5zdGFudGlhdGVHZW5pZU9iamVjdCxcbiAgZ2V0U3RhYmxlR2VuaWVPYmplY3RDbGFzc05hbWUsXG59IGZyb20gXCIuL3JlYWN0LWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IHNoYWxsb3dFcXVhbCwgdXNlU2VsZWN0b3IgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB7XG4gIERhdGFDbGFzcyxcbiAgR2VuaWVPYmplY3QsXG4gIEhlbHBlckNsYXNzLFxuICBzZXRTaGFyZWRTdGF0ZSxcbn0gZnJvbSBcIkBnYXJyaXg4Mi9yZWFjdGdlbmllLWRzbFwiO1xuaW1wb3J0IHsgZ2VuaWVEaXNwYXRjaCwgc2hhcmVkU3RhdGUgfSBmcm9tIFwiQGdhcnJpeDgyL3JlYWN0Z2VuaWUtZHNsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IEdlbmllVXNlckZhY2luZ0Vycm9yLCBpc0dlbmllVXNlckZhY2luZ0Vycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5cbmV4cG9ydCB0eXBlIFJlYWN0R2VuaWVTdGF0ZSA9IHtcbiAgbWVzc2FnZTogUmVhY3RHZW5pZU1lc3NhZ2U7XG4gIG5hdlN0YXRlOiBOYXZpZ2F0b3JTdGF0ZTtcbiAgbmF2U3RhY2s6IG51bWJlcjtcbiAgcmVzdWx0V2luZG93QnlSZWY6IFJlY29yZDxzdHJpbmcsIFJlc3VsdFdpbmRvd0VudHJ5PjtcbiAgcmVzdWx0V2luZG93T3JkZXI6IHN0cmluZ1tdO1xuICByZXN1bHRXaW5kb3dNYXg6IG51bWJlcjtcbiAgcmVzdWx0V2luZG93VHRsTXM6IG51bWJlcjtcbiAgcmVzdWx0V2luZG93U2VxdWVuY2U6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFJlYWN0R2VuaWVNZXNzYWdlID0gQWdlbnRSZXNwb25zZVBheWxvYWQgJiB7XG4gIG9yaWdpbjogXCJ2b2ljZVwiIHwgXCJzeXN0ZW1cIjtcbiAgbWVzc2FnZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5SW50ZW50T3BlcmF0aW9uID1cbiAgfCB7XG4gICAgICBraW5kOiBcIm1hdGNoaW5nXCIgfCBcImNvbnRhaW5zXCIgfCBcImVxdWFsc1wiO1xuICAgICAgZmllbGQ6IHN0cmluZztcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuICAgIH1cbiAgfCB7XG4gICAgICBraW5kOiBcImJldHdlZW5cIjtcbiAgICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgICBmcm9tPzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbiAgICAgIHRvPzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbiAgICB9XG4gIHwge1xuICAgICAga2luZDogXCJzb3J0XCI7XG4gICAgICBmaWVsZDogc3RyaW5nO1xuICAgICAgYXNjZW5kaW5nOiBib29sZWFuO1xuICAgIH1cbiAgfCB7XG4gICAgICBraW5kOiBcImluZGV4XCI7XG4gICAgICB2YWx1ZTogbnVtYmVyO1xuICAgIH1cbiAgfCB7XG4gICAgICBraW5kOiBcImxlbmd0aFwiO1xuICAgIH07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5SW50ZW50ID0ge1xuICBvcHM6IFF1ZXJ5SW50ZW50T3BlcmF0aW9uW107XG4gIGhhc2g6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFJlc3VsdFdpbmRvd0VudHJ5ID0ge1xuICByZXN1bHRSZWY6IHN0cmluZztcbiAgZXZlbnRJZDogbnVtYmVyO1xuICByZXN1bHRPYmplY3RUeXBlOiBzdHJpbmc7XG4gIG9yZGVyZWRDb25zdHJ1Y3RvclBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PltdO1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbn07XG5cbnR5cGUgQWdlbnRSZXNwb25zZVBheWxvYWQgPSB7XG4gIG1pbmltYWxUZXh0OiBzdHJpbmc7XG4gIGZ1bGxUZXh0OiBzdHJpbmc7XG4gIHR5cGU6IFwiaW5mb1wiIHwgXCJlcnJvclwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIjtcbiAgc2hvdWxkU3BlYWs6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgbGV0IHVpQWN0aXZlID0gdHJ1ZTtcblxuZXhwb3J0IGludGVyZmFjZSBOYXZpZ2F0b3JTdGF0ZSB7XG4gIG9iamVjdFZpZXdDbGFzc05hbWU6IHN0cmluZyB8IG51bGw7XG4gIG9iamVjdENvbnN0cnVjdG9yUGFyYW1zOiBhbnk7XG4gIHF1ZXJ5SW50ZW50PzogUXVlcnlJbnRlbnQgfCBudWxsO1xuICByZXN1bHRSZWY/OiBzdHJpbmcgfCBudWxsO1xuICByZXN1bHRPYmplY3RUeXBlPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuY29uc3QgREVGQVVMVF9SRVNVTFRfV0lORE9XX01BWCA9IDQwO1xuY29uc3QgREVGQVVMVF9SRVNVTFRfV0lORE9XX1RUTF9NUyA9IDUgKiA2MCAqIDEwMDA7XG5cbmZ1bmN0aW9uIGdldENvbnN0cnVjdG9yUGFyYW1zRnJvbVJlc3VsdFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkgfCBudWxsIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUuX2dldENvbnN0cnVjdG9yUGFyYW1zICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gdmFsdWUuX2dldENvbnN0cnVjdG9yUGFyYW1zKCk7XG59XG5cbmZ1bmN0aW9uIGRlZXBGcmVlemVPYmplY3Q8VD4odmFsdWU6IFQpOiBUIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgT2JqZWN0LmZyZWV6ZSh2YWx1ZSk7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlIGFzIGFueSkpIHtcbiAgICBjb25zdCBuZXN0ZWQgPSAodmFsdWUgYXMgYW55KVtrZXldO1xuICAgIGlmIChuZXN0ZWQgJiYgdHlwZW9mIG5lc3RlZCA9PT0gXCJvYmplY3RcIiAmJiAhT2JqZWN0LmlzRnJvemVuKG5lc3RlZCkpIHtcbiAgICAgIGRlZXBGcmVlemVPYmplY3QobmVzdGVkKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjbG9uZURldGFjaGVkVmFsdWU8VD4odmFsdWU6IFQpOiBUIHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgY29uc3QgbmF0aXZlU3RydWN0dXJlZENsb25lID0gKGdsb2JhbFRoaXMgYXMgYW55KS5zdHJ1Y3R1cmVkQ2xvbmU7XG4gICAgY29uc3QgY2xvbmVkID1cbiAgICAgIHR5cGVvZiBuYXRpdmVTdHJ1Y3R1cmVkQ2xvbmUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IG5hdGl2ZVN0cnVjdHVyZWRDbG9uZSh2YWx1ZSlcbiAgICAgICAgOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgcmV0dXJuIGRlZXBGcmVlemVPYmplY3QoY2xvbmVkKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIFwiW1JlYWN0R2VuaWVdIFVuYWJsZSB0byBjbG9uZSBjb25zdHJ1Y3RvciBwYXJhbXMgZm9yIHJlc3VsdCB3aW5kb3cgc25hcHNob3RcIixcbiAgICAgIGVycm9yLFxuICAgICk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUltbXV0YWJsZUNvbnN0cnVjdG9yUGFyYW1zU25hcHNob3QoXG4gIHZhbHVlOiBhbnksXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yUGFyYW1zID0gZ2V0Q29uc3RydWN0b3JQYXJhbXNGcm9tUmVzdWx0VmFsdWUodmFsdWUpO1xuICBpZiAoIWNvbnN0cnVjdG9yUGFyYW1zIHx8IHR5cGVvZiBjb25zdHJ1Y3RvclBhcmFtcyAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHNuYXBzaG90ID0gY2xvbmVEZXRhY2hlZFZhbHVlKGNvbnN0cnVjdG9yUGFyYW1zKTtcbiAgaWYgKCFzbmFwc2hvdCB8fCB0eXBlb2Ygc25hcHNob3QgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gc25hcHNob3QgYXMgUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuZnVuY3Rpb24gZW5zdXJlUmVzdWx0V2luZG93RGVmYXVsdHMoc3RhdGU6IFJlYWN0R2VuaWVTdGF0ZSkge1xuICAvLyBgZ2VuaWVEaXNwYXRjaGAgc3RhcnRzIGZyb20gYSBzaGFsbG93IGNvcHkgb2YgdGhlIHByZXZpb3VzIHN0YXRlLlxuICAvLyBDbG9uZSBtdXRhYmxlIHJlc3VsdC13aW5kb3cgY29udGFpbmVycyBiZWZvcmUgd3JpdGVzIHNvIHdlIGRvbid0IG11dGF0ZVxuICAvLyByZWZlcmVuY2VzIGZyb20gdGhlIHByZXZpb3VzIFJlZHV4IHN0YXRlIHNuYXBzaG90LlxuICBzdGF0ZS5yZXN1bHRXaW5kb3dCeVJlZiA9IHN0YXRlLnJlc3VsdFdpbmRvd0J5UmVmXG4gICAgPyB7IC4uLnN0YXRlLnJlc3VsdFdpbmRvd0J5UmVmIH1cbiAgICA6IHt9O1xuICBzdGF0ZS5yZXN1bHRXaW5kb3dPcmRlciA9IHN0YXRlLnJlc3VsdFdpbmRvd09yZGVyXG4gICAgPyBbLi4uc3RhdGUucmVzdWx0V2luZG93T3JkZXJdXG4gICAgOiBbXTtcbiAgaWYgKCFzdGF0ZS5yZXN1bHRXaW5kb3dNYXggfHwgc3RhdGUucmVzdWx0V2luZG93TWF4IDw9IDApIHtcbiAgICBzdGF0ZS5yZXN1bHRXaW5kb3dNYXggPSBERUZBVUxUX1JFU1VMVF9XSU5ET1dfTUFYO1xuICB9XG4gIGlmICghc3RhdGUucmVzdWx0V2luZG93VHRsTXMgfHwgc3RhdGUucmVzdWx0V2luZG93VHRsTXMgPD0gMCkge1xuICAgIHN0YXRlLnJlc3VsdFdpbmRvd1R0bE1zID0gREVGQVVMVF9SRVNVTFRfV0lORE9XX1RUTF9NUztcbiAgfVxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShzdGF0ZS5yZXN1bHRXaW5kb3dTZXF1ZW5jZSkpIHtcbiAgICBzdGF0ZS5yZXN1bHRXaW5kb3dTZXF1ZW5jZSA9IDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJ1bmVSZXN1bHRXaW5kb3coc3RhdGU6IFJlYWN0R2VuaWVTdGF0ZSwgbm93ID0gRGF0ZS5ub3coKSkge1xuICBlbnN1cmVSZXN1bHRXaW5kb3dEZWZhdWx0cyhzdGF0ZSk7XG4gIGNvbnN0IG1pbkNyZWF0ZWRBdCA9IG5vdyAtIHN0YXRlLnJlc3VsdFdpbmRvd1R0bE1zO1xuICBzdGF0ZS5yZXN1bHRXaW5kb3dPcmRlciA9IHN0YXRlLnJlc3VsdFdpbmRvd09yZGVyLmZpbHRlcigocmVzdWx0UmVmKSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBzdGF0ZS5yZXN1bHRXaW5kb3dCeVJlZltyZXN1bHRSZWZdO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGVudHJ5LmNyZWF0ZWRBdCA8IG1pbkNyZWF0ZWRBdCkge1xuICAgICAgZGVsZXRlIHN0YXRlLnJlc3VsdFdpbmRvd0J5UmVmW3Jlc3VsdFJlZl07XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICB3aGlsZSAoc3RhdGUucmVzdWx0V2luZG93T3JkZXIubGVuZ3RoID4gc3RhdGUucmVzdWx0V2luZG93TWF4KSB7XG4gICAgY29uc3Qgb2xkZXN0UmVmID0gc3RhdGUucmVzdWx0V2luZG93T3JkZXIuc2hpZnQoKTtcbiAgICBpZiAoIW9sZGVzdFJlZikgYnJlYWs7XG4gICAgZGVsZXRlIHN0YXRlLnJlc3VsdFdpbmRvd0J5UmVmW29sZGVzdFJlZl07XG4gIH1cbn1cblxuZnVuY3Rpb24gcHV0UmVzdWx0V2luZG93RW50cnkoXG4gIHN0YXRlOiBSZWFjdEdlbmllU3RhdGUsXG4gIGVudHJ5OiBPbWl0PFJlc3VsdFdpbmRvd0VudHJ5LCBcInJlc3VsdFJlZlwiIHwgXCJjcmVhdGVkQXRcIj4sXG4pOiBSZXN1bHRXaW5kb3dFbnRyeSB7XG4gIGVuc3VyZVJlc3VsdFdpbmRvd0RlZmF1bHRzKHN0YXRlKTtcbiAgc3RhdGUucmVzdWx0V2luZG93U2VxdWVuY2UgKz0gMTtcbiAgY29uc3QgcmVzdWx0UmVmID0gYHJnLSR7ZW50cnkuZXZlbnRJZH0tJHtzdGF0ZS5yZXN1bHRXaW5kb3dTZXF1ZW5jZX1gO1xuICBjb25zdCBjcmVhdGVkQXQgPSBEYXRlLm5vdygpO1xuICBjb25zdCBjb21wbGV0ZUVudHJ5OiBSZXN1bHRXaW5kb3dFbnRyeSA9IHtcbiAgICAuLi5lbnRyeSxcbiAgICByZXN1bHRSZWYsXG4gICAgY3JlYXRlZEF0LFxuICB9O1xuICBzdGF0ZS5yZXN1bHRXaW5kb3dCeVJlZltyZXN1bHRSZWZdID0gY29tcGxldGVFbnRyeTtcbiAgc3RhdGUucmVzdWx0V2luZG93T3JkZXIucHVzaChyZXN1bHRSZWYpO1xuICBwcnVuZVJlc3VsdFdpbmRvdyhzdGF0ZSwgY3JlYXRlZEF0KTtcbiAgcmV0dXJuIGNvbXBsZXRlRW50cnk7XG59XG5cbmZ1bmN0aW9uIGhhc2hTdHJpbmcodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBoYXNoID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyB2YWx1ZS5jaGFyQ29kZUF0KGkpO1xuICAgIGhhc2ggfD0gMDtcbiAgfVxuICByZXR1cm4gTWF0aC5hYnMoaGFzaCkudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBhY2Nlc3NvckZpZWxkVG9QYXRoKGZpZWxkOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHR5cGVvZiBmaWVsZCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBmaWVsZDtcbiAgfVxuICBpZiAoIWZpZWxkIHx8IHR5cGVvZiBmaWVsZCAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSBcImFjY2Vzc1wiKSB7XG4gICAgY29uc3QgcGFyZW50ID0gYWNjZXNzb3JGaWVsZFRvUGF0aChmaWVsZC5wYXJlbnQpO1xuICAgIGlmICghcGFyZW50IHx8IHR5cGVvZiBmaWVsZC5hY2Nlc3MgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gYCR7cGFyZW50fS4ke2ZpZWxkLmFjY2Vzc31gO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhc3RWYWx1ZVRvUHJpbWl0aXZlKGFzdDogYW55KTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGlmICghYXN0IHx8IHR5cGVvZiBhc3QgIT09IFwib2JqZWN0XCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChhc3QudHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBhc3QudHlwZSA9PT0gXCJpbnRcIiB8fCBhc3QudHlwZSA9PT0gXCJmbG9hdFwiIHx8IGFzdC50eXBlID09PSBcImJvb2xlYW5cIikge1xuICAgIHJldHVybiBhc3QudmFsdWU7XG4gIH1cbiAgaWYgKGFzdC50eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgaWYgKFxuICAgICAgYXN0Lm9iamVjdFR5cGUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgIGFzdC5vYmplY3RUeXBlID09PSBcIm51bWJlclwiIHx8XG4gICAgICBhc3Qub2JqZWN0VHlwZSA9PT0gXCJmbG9hdFwiIHx8XG4gICAgICBhc3Qub2JqZWN0VHlwZSA9PT0gXCJpbnRcIiB8fFxuICAgICAgYXN0Lm9iamVjdFR5cGUgPT09IFwiYm9vbGVhblwiIHx8XG4gICAgICBhc3Qub2JqZWN0VHlwZSA9PT0gXCJib29sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiBhc3QudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RGdW5jdGlvbkNhbGxzKGFzdDogYW55LCBjYWxsczogYW55W10gPSBbXSk6IGFueVtdIHtcbiAgaWYgKCFhc3QgfHwgdHlwZW9mIGFzdCAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBjYWxscztcbiAgfVxuXG4gIGlmIChhc3QudHlwZSA9PT0gXCJpbmRleFwiKSB7XG4gICAgY2FsbHMucHVzaCh7XG4gICAgICB0eXBlOiBcImZ1bmN0aW9uX2NhbGxcIixcbiAgICAgIGZ1bmNfbmFtZTogXCJpbmRleFwiLFxuICAgICAgcGFyYW1ldGVyczogW3sgcGFyYW1ldGVyOiBcImluZGV4XCIsIHZhbHVlOiB7IHR5cGU6IFwiaW50XCIsIHZhbHVlOiBhc3QuaW5kZXggfSB9XSxcbiAgICB9KTtcbiAgICByZXR1cm4gY29sbGVjdEZ1bmN0aW9uQ2FsbHMoYXN0LnBhcmVudCwgY2FsbHMpO1xuICB9XG5cbiAgaWYgKGFzdC50eXBlID09PSBcImFjY2Vzc1wiKSB7XG4gICAgaWYgKGFzdC5hY2Nlc3MgJiYgYXN0LmFjY2Vzcy50eXBlID09PSBcImZ1bmN0aW9uX2NhbGxcIikge1xuICAgICAgY2FsbHMucHVzaChhc3QuYWNjZXNzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3RGdW5jdGlvbkNhbGxzKGFzdC5wYXJlbnQsIGNhbGxzKTtcbiAgfVxuXG4gIHJldHVybiBjYWxscztcbn1cblxuZnVuY3Rpb24gZ2V0Q2FsbFBhcmFtKGNhbGw6IGFueSwgcGFyYW1OYW1lOiBzdHJpbmcpOiBhbnkgfCB1bmRlZmluZWQge1xuICBpZiAoIWNhbGwgfHwgIUFycmF5LmlzQXJyYXkoY2FsbC5wYXJhbWV0ZXJzKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZW50cnkgPSBjYWxsLnBhcmFtZXRlcnMuZmluZCgocGFyYW06IGFueSkgPT4gcGFyYW0ucGFyYW1ldGVyID09PSBwYXJhbU5hbWUpO1xuICByZXR1cm4gZW50cnk/LnZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFF1ZXJ5SW50ZW50RnJvbUFzdChhc3Q6IGFueSk6IFF1ZXJ5SW50ZW50IHwgbnVsbCB7XG4gIGNvbnN0IGNhbGxzID0gY29sbGVjdEZ1bmN0aW9uQ2FsbHMoYXN0LCBbXSkucmV2ZXJzZSgpO1xuICBjb25zdCBvcHM6IFF1ZXJ5SW50ZW50T3BlcmF0aW9uW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGNhbGwgb2YgY2FsbHMpIHtcbiAgICBjb25zdCBmdW5jTmFtZSA9IGNhbGw/LmZ1bmNfbmFtZTtcbiAgICBpZiAoZnVuY05hbWUgPT09IFwibWF0Y2hpbmdcIiB8fCBmdW5jTmFtZSA9PT0gXCJjb250YWluc1wiIHx8IGZ1bmNOYW1lID09PSBcImVxdWFsc1wiKSB7XG4gICAgICBjb25zdCBmaWVsZEFzdCA9IGdldENhbGxQYXJhbShjYWxsLCBcImZpZWxkXCIpO1xuICAgICAgY29uc3QgdmFsdWVBc3QgPSBnZXRDYWxsUGFyYW0oY2FsbCwgXCJ2YWx1ZVwiKTtcbiAgICAgIGNvbnN0IGZpZWxkUGF0aCA9IGFjY2Vzc29yRmllbGRUb1BhdGgoZmllbGRBc3Q/LmZpZWxkKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gYXN0VmFsdWVUb1ByaW1pdGl2ZSh2YWx1ZUFzdCk7XG4gICAgICBpZiAoZmllbGRQYXRoICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3BzLnB1c2goe1xuICAgICAgICAgIGtpbmQ6IGZ1bmNOYW1lLFxuICAgICAgICAgIGZpZWxkOiBmaWVsZFBhdGgsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGZ1bmNOYW1lID09PSBcImJldHdlZW5cIikge1xuICAgICAgY29uc3QgZmllbGRBc3QgPSBnZXRDYWxsUGFyYW0oY2FsbCwgXCJmaWVsZFwiKTtcbiAgICAgIGNvbnN0IGZyb20gPSBhc3RWYWx1ZVRvUHJpbWl0aXZlKGdldENhbGxQYXJhbShjYWxsLCBcImZyb21cIikpO1xuICAgICAgY29uc3QgdG8gPSBhc3RWYWx1ZVRvUHJpbWl0aXZlKGdldENhbGxQYXJhbShjYWxsLCBcInRvXCIpKTtcbiAgICAgIGNvbnN0IGZpZWxkUGF0aCA9IGFjY2Vzc29yRmllbGRUb1BhdGgoZmllbGRBc3Q/LmZpZWxkKTtcbiAgICAgIGlmIChmaWVsZFBhdGggJiYgKGZyb20gIT09IHVuZGVmaW5lZCB8fCB0byAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBvcHMucHVzaCh7XG4gICAgICAgICAga2luZDogXCJiZXR3ZWVuXCIsXG4gICAgICAgICAgZmllbGQ6IGZpZWxkUGF0aCxcbiAgICAgICAgICAuLi4oZnJvbSAhPT0gdW5kZWZpbmVkID8geyBmcm9tIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHRvICE9PSB1bmRlZmluZWQgPyB7IHRvIH0gOiB7fSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGZ1bmNOYW1lID09PSBcInNvcnRcIikge1xuICAgICAgY29uc3QgZmllbGRBc3QgPSBnZXRDYWxsUGFyYW0oY2FsbCwgXCJmaWVsZFwiKTtcbiAgICAgIGNvbnN0IGFzY2VuZGluZyA9IGFzdFZhbHVlVG9QcmltaXRpdmUoZ2V0Q2FsbFBhcmFtKGNhbGwsIFwiYXNjZW5kaW5nXCIpKTtcbiAgICAgIGNvbnN0IGZpZWxkUGF0aCA9IGFjY2Vzc29yRmllbGRUb1BhdGgoZmllbGRBc3Q/LmZpZWxkKTtcbiAgICAgIGlmIChmaWVsZFBhdGgpIHtcbiAgICAgICAgb3BzLnB1c2goe1xuICAgICAgICAgIGtpbmQ6IFwic29ydFwiLFxuICAgICAgICAgIGZpZWxkOiBmaWVsZFBhdGgsXG4gICAgICAgICAgYXNjZW5kaW5nOiBhc2NlbmRpbmcgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBCb29sZWFuKGFzY2VuZGluZyksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGZ1bmNOYW1lID09PSBcImluZGV4XCIpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gYXN0VmFsdWVUb1ByaW1pdGl2ZShnZXRDYWxsUGFyYW0oY2FsbCwgXCJpbmRleFwiKSk7XG4gICAgICBpZiAodHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIG9wcy5wdXNoKHtcbiAgICAgICAgICBraW5kOiBcImluZGV4XCIsXG4gICAgICAgICAgdmFsdWU6IGluZGV4LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChmdW5jTmFtZSA9PT0gXCJsZW5ndGhcIikge1xuICAgICAgb3BzLnB1c2goeyBraW5kOiBcImxlbmd0aFwiIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBzZXJpYWxpemVkID0gSlNPTi5zdHJpbmdpZnkob3BzKTtcbiAgcmV0dXJuIHtcbiAgICBvcHMsXG4gICAgaGFzaDogaGFzaFN0cmluZyhzZXJpYWxpemVkKSxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUdlbmllQ29kZVNlbGVjdG9yID0gKGNvbW1hbmQ6IHN0cmluZykgPT4ge1xuICByZXR1cm4gYXN5bmMgKHN0YXRlOiBhbnkpID0+IHtcbiAgICB1aUFjdGl2ZSA9IGZhbHNlO1xuICAgIHNldFNoYXJlZFN0YXRlKHN0YXRlKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBHZW5pZUludGVycHJldGVyLmRzbEludGVycHJldGVyLmludGVycHJldChjb21tYW5kKTtcbiAgICAvLyBsb2dnZXIuaW5mbyhgZXhlY3V0ZWQgcmVzdWx0ICR7cmVzdWx0fWApO1xuICAgIC8vIGxvZ2dlci5pbmZvKGBhZnRlciBleGVjdXRpbmcgc3RhdGUgJHtKU09OLnN0cmluZ2lmeShzdGF0ZSl9YCk7XG4gICAgdWlBY3RpdmUgPSB0cnVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5jb25zdCBzaGFsbG93RXF1YWxXaXRoQXJyYXkgPSAobGVmdDogYW55LCByaWdodDogYW55KSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGxlZnQpICYmIEFycmF5LmlzQXJyYXkocmlnaHQpKSB7XG4gICAgaWYgKGxlZnQubGVuZ3RoICE9PSByaWdodC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZWZ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXNoYWxsb3dFcXVhbFdpdGhBcnJheShsZWZ0W2ldLCByaWdodFtpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2hhbGxvd0VxdWFsKGxlZnQsIHJpZ2h0KTtcbiAgfVxufTtcblxuY29uc3QgY29udmVydEdlbmllQ2xhc3NUb1N0YXRlID0gKG9iajogYW55KSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcCgoZWxlbWVudCkgPT4gY29udmVydEdlbmllQ2xhc3NUb1N0YXRlKGVsZW1lbnQpKTtcbiAgfSBlbHNlIGlmIChcbiAgICBvYmogPT09IG51bGwgfHxcbiAgICBvYmogPT09IHVuZGVmaW5lZCB8fFxuICAgIG9iai5jb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSBpZiAob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmllT2JqZWN0KSB7XG4gICAgaWYgKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgaW5zdGFuY2VvZiBEYXRhQ2xhc3MpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fZ2VuaWVPYmplY3RUeXBlOiBcIkRhdGFDbGFzc1wiLFxuICAgICAgICBfX2dlbmllT2JqZWN0Q2xhc3M6IGdldFN0YWJsZUdlbmllT2JqZWN0Q2xhc3NOYW1lKG9iaiksXG4gICAgICAgIF9fZ2VuaWVPYmplY3RLZXk6IG9ialtvYmouZ2VuaWVLZXldLFxuICAgICAgICAuLi5vYmouX19nZXRTdGF0ZSgpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgaW5zdGFuY2VvZiBIZWxwZXJDbGFzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX19nZW5pZU9iamVjdFR5cGU6IFwiSGVscGVyQ2xhc3NcIixcbiAgICAgICAgX19nZW5pZU9iamVjdENsYXNzOiBnZXRTdGFibGVHZW5pZU9iamVjdENsYXNzTmFtZShvYmopLFxuICAgICAgICAuLi5vYmoubG9jYWxTdG9yZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gR2VuaWVPYmplY3QgdHlwZVwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXNlR2VuaWVTZWxlY3RvciA9IChzZWxlY3RvcjogYW55KSA9PiB7XG4gIGxldCBzZWxlY3RvclJlc3VsdDogYW55ID0gdW5kZWZpbmVkO1xuICB1c2VTZWxlY3Rvcigoc3RhdGU6IGFueSkgPT4ge1xuICAgIHNldFNoYXJlZFN0YXRlKHN0YXRlKTtcbiAgICBzZWxlY3RvclJlc3VsdCA9IHNlbGVjdG9yKHN0YXRlKTtcbiAgICByZXR1cm4gY29udmVydEdlbmllQ2xhc3NUb1N0YXRlKHNlbGVjdG9yUmVzdWx0KTtcbiAgfSwgc2hhbGxvd0VxdWFsV2l0aEFycmF5KTtcbiAgcmV0dXJuIHNlbGVjdG9yUmVzdWx0O1xufTtcblxudHlwZSBHZW5pZUNvZGVSZXN1bHQgPSB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIHJlc3VsdHM6IGFueVtdO1xufTtcblxuY29uc3QgUkVTVUxUX1BSRVZJRVdfTUFYX0xFTkdUSCA9IDE2MDtcblxuZnVuY3Rpb24gdHJ1bmNhdGVUZXh0KHZhbHVlOiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA8PSBtYXhMZW5ndGgpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGAke3ZhbHVlLnNsaWNlKDAsIE1hdGgubWF4KDAsIG1heExlbmd0aCAtIDEpKS50cmltRW5kKCl94oCmYDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3lzdGVtTWVzc2FnZShcbiAgbWluaW1hbFRleHQ6IHN0cmluZyxcbiAgZnVsbFRleHQ6IHN0cmluZyxcbiAgdHlwZTogQWdlbnRSZXNwb25zZVBheWxvYWRbXCJ0eXBlXCJdID0gXCJpbmZvXCIsXG4gIHNob3VsZFNwZWFrID0gZmFsc2UsXG4gIG9yaWdpbjogUmVhY3RHZW5pZU1lc3NhZ2VbXCJvcmlnaW5cIl0gPSBcInN5c3RlbVwiLFxuKTogUmVhY3RHZW5pZU1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIG1pbmltYWxUZXh0LFxuICAgIGZ1bGxUZXh0LFxuICAgIHR5cGUsXG4gICAgc2hvdWxkU3BlYWssXG4gICAgb3JpZ2luLFxuICAgIG1lc3NhZ2U6IGZ1bGxUZXh0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVVc2VyRmFjaW5nTWVzc2FnZShcbiAgZXJyb3I6IEdlbmllVXNlckZhY2luZ0Vycm9yLFxuICBvcmlnaW46IFJlYWN0R2VuaWVNZXNzYWdlW1wib3JpZ2luXCJdLFxuICBzaG91bGRTcGVha0J5RGVmYXVsdDogYm9vbGVhbixcbik6IFJlYWN0R2VuaWVNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBtaW5pbWFsVGV4dDogZXJyb3IubWluaW1hbFRleHQsXG4gICAgZnVsbFRleHQ6IGVycm9yLmZ1bGxUZXh0LFxuICAgIHR5cGU6IGVycm9yLnR5cGUsXG4gICAgc2hvdWxkU3BlYWs6IGVycm9yLnNob3VsZFNwZWFrID8/IHNob3VsZFNwZWFrQnlEZWZhdWx0LFxuICAgIG9yaWdpbixcbiAgICBtZXNzYWdlOiBlcnJvci5mdWxsVGV4dCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2FmZVNlcmlhbGl6ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gXCJub25lXCI7XG4gIH1cbiAgY29uc3Qgc2VyaWFsaXplZCA9IFN0cmluZyh2YWx1ZSk7XG4gIHJldHVybiB0cnVuY2F0ZVRleHQoc2VyaWFsaXplZCwgUkVTVUxUX1BSRVZJRVdfTUFYX0xFTkdUSCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUmVzdWx0RGlnZXN0KHJlc3VsdDogYW55LCBwYXJzZWQ6IHN0cmluZykge1xuICBpZiAoIXJlc3VsdCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZCxcbiAgICAgIHN0YXR1czogXCJ1bmtub3duXCIsXG4gICAgICByZXN1bHRUeXBlOiBcInVua25vd25cIixcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3VsdC50eXBlID09PSBcImFycmF5XCIpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHJlc3VsdC52YWx1ZSkgPyByZXN1bHQudmFsdWUgOiBbXTtcbiAgICBjb25zdCBmaXJzdCA9IHZhbHVlcy5sZW5ndGggPiAwID8gdmFsdWVzWzBdIDogbnVsbDtcbiAgICBjb25zdCBmaXJzdE9iamVjdFR5cGUgPSBmaXJzdD8ub2JqZWN0VHlwZSB8fCBudWxsO1xuICAgIGNvbnN0IGZpcnN0UHJldmlldyA9XG4gICAgICBmaXJzdCAmJiBmaXJzdC50eXBlID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gc2FmZVNlcmlhbGl6ZVZhbHVlKGZpcnN0LnZhbHVlKVxuICAgICAgICA6IG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VkLFxuICAgICAgc3RhdHVzOiBcIm9rXCIsXG4gICAgICByZXN1bHRUeXBlOiBcImFycmF5XCIsXG4gICAgICBjb3VudDogdmFsdWVzLmxlbmd0aCxcbiAgICAgIGZpcnN0T2JqZWN0VHlwZSxcbiAgICAgIGZpcnN0UHJldmlldyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3VsdC50eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZCxcbiAgICAgIHN0YXR1czogXCJva1wiLFxuICAgICAgcmVzdWx0VHlwZTogXCJvYmplY3RcIixcbiAgICAgIG9iamVjdFR5cGU6IHJlc3VsdC5vYmplY3RUeXBlIHx8IFwidW5rbm93blwiLFxuICAgICAgcHJldmlldzogc2FmZVNlcmlhbGl6ZVZhbHVlKHJlc3VsdC52YWx1ZSksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGFyc2VkLFxuICAgIHN0YXR1czogXCJva1wiLFxuICAgIHJlc3VsdFR5cGU6IFwidW5rbm93blwiLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUdlbmllQ29kZShcbiAgY29tbWFuZDogdW5rbm93bixcbiAgb3B0aW9uczoge1xuICAgIG9yaWdpbj86IFJlYWN0R2VuaWVNZXNzYWdlW1wib3JpZ2luXCJdO1xuICAgIHNob3VsZFNwZWFrRXJyb3JzPzogYm9vbGVhbjtcbiAgfSA9IHt9LFxuKTogUHJvbWlzZTxHZW5pZUNvZGVSZXN1bHQ+IHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPVxuICAgICAgdHlwZW9mIGNvbW1hbmQgPT09IFwic3RyaW5nXCIgPyBjb21tYW5kLnRyaW0oKSA6IFwiXCI7XG4gICAgY29uc3QgbWVzc2FnZU9yaWdpbiA9IG9wdGlvbnMub3JpZ2luID8/IFwic3lzdGVtXCI7XG4gICAgY29uc3Qgc2hvdWxkU3BlYWtFcnJvcnMgPSBCb29sZWFuKG9wdGlvbnMuc2hvdWxkU3BlYWtFcnJvcnMpO1xuICAgIC8vIGxvZ2dlci5pbmZvKGBleGVjdXRpbmcgY29tbWFuZCA6ICR7c2FuaXRpemVkfWApO1xuXG4gICAgaWYgKCFzYW5pdGl6ZWQpIHtcbiAgICAgIGdlbmllRGlzcGF0Y2goKCkgPT4ge1xuICAgICAgICBjb25zdCByZWFjdEdlbmllU3RhdGUgPSBzaGFyZWRTdGF0ZSBhcyBSZWFjdEdlbmllU3RhdGU7XG4gICAgICAgIHJlYWN0R2VuaWVTdGF0ZS5tZXNzYWdlID0gY3JlYXRlU3lzdGVtTWVzc2FnZShcbiAgICAgICAgICBcIk5vIGFjdGlvbmFibGUgY29tbWFuZC5cIixcbiAgICAgICAgICBcIkkgaGVhcmQgeW91LCBidXQgdGhlcmUgaXMgbm8gYWN0aW9uYWJsZSBjb21tYW5kIHRvIHJ1bi5cIixcbiAgICAgICAgICBcImluZm9cIixcbiAgICAgICAgICBzaG91bGRTcGVha0Vycm9ycyxcbiAgICAgICAgICBtZXNzYWdlT3JpZ2luLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgcmVzdWx0czogW25ldyBFcnJvcihcIk5vIGFjdGlvbmFibGUgY29tbWFuZFwiKV0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEd1YXJkIGFnYWluc3QgR2VuaWVJbnRlcnByZXRlciBub3QgYmVpbmcgaW5pdGlhbGl6ZWRcbiAgICBpZiAoIUdlbmllSW50ZXJwcmV0ZXIgfHwgIUdlbmllSW50ZXJwcmV0ZXIuZHNsSW50ZXJwcmV0ZXIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignR2VuaWVJbnRlcnByZXRlciBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICAgIGdlbmllRGlzcGF0Y2goKCkgPT4ge1xuICAgICAgICBjb25zdCByZWFjdEdlbmllU3RhdGUgPSBzaGFyZWRTdGF0ZSBhcyBSZWFjdEdlbmllU3RhdGU7XG4gICAgICAgIHJlYWN0R2VuaWVTdGF0ZS5tZXNzYWdlID0gY3JlYXRlU3lzdGVtTWVzc2FnZShcbiAgICAgICAgICBcIlN5c3RlbSBub3QgcmVhZHkuXCIsXG4gICAgICAgICAgXCJTeXN0ZW0gbm90IHJlYWR5LiBQbGVhc2UgdHJ5IGFnYWluLlwiLFxuICAgICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgICBzaG91bGRTcGVha0Vycm9ycyxcbiAgICAgICAgICBtZXNzYWdlT3JpZ2luLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgcmVzdWx0czogW25ldyBFcnJvcignR2VuaWVJbnRlcnByZXRlciBub3QgaW5pdGlhbGl6ZWQnKV0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICBhd2FpdCBHZW5pZUludGVycHJldGVyLmRzbEludGVycHJldGVyLmludGVycHJldFN0ZXBzKHNhbml0aXplZCk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgZXhlY3V0ZWQgcmVzdWx0ICR7cmVzdWx0fWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgcmVzdWx0czogcmVzdWx0LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ2Vycm9yIGV4ZWN1dGluZyBjb21tYW5kOicsIHNhbml0aXplZCwgZSk7XG4gICAgICBnZW5pZURpc3BhdGNoKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVhY3RHZW5pZVN0YXRlID0gc2hhcmVkU3RhdGUgYXMgUmVhY3RHZW5pZVN0YXRlO1xuICAgICAgICByZWFjdEdlbmllU3RhdGUubWVzc2FnZSA9IGlzR2VuaWVVc2VyRmFjaW5nRXJyb3IoZSlcbiAgICAgICAgICA/IGNyZWF0ZVVzZXJGYWNpbmdNZXNzYWdlKGUsIG1lc3NhZ2VPcmlnaW4sIHNob3VsZFNwZWFrRXJyb3JzKVxuICAgICAgICAgIDogY3JlYXRlU3lzdGVtTWVzc2FnZShcbiAgICAgICAgICAgICAgXCJJIGNvdWxkIG5vdCBwcm9jZXNzIHRoYXQuXCIsXG4gICAgICAgICAgICAgIFwiU29ycnksIEkgZG9uJ3QgdW5kZXJzdGFuZC4uLlwiLFxuICAgICAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgICAgICAgIHNob3VsZFNwZWFrRXJyb3JzLFxuICAgICAgICAgICAgICBtZXNzYWdlT3JpZ2luLFxuICAgICAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IFtlXSxcbiAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheVJlc3VsdChcbiAgZXhlY3V0aW9uUmVzdWx0OiBHZW5pZUNvZGVSZXN1bHQsXG4gIHRyYW5zY3JpcHQ6IHN0cmluZyxcbiAgcGFyc2VkOiBzdHJpbmcsXG4gIGdlbmllSW50ZXJmYWNlczogR2VuaWVJbnRlcmZhY2VTcGVjW10sXG4pIHtcbiAgZ2VuaWVEaXNwYXRjaCgoKSA9PiB7XG4gICAgbGV0IGFsbERpc3BsYXlpbmdPYmplY3RzID0gW107XG4gICAgbGV0IGRpc3BsYXlpbmdPYmplY3QgPSBudWxsO1xuICAgIGxldCBkaXNwbGF5aW5nT2JqZWN0VHlwZSA9IFwiXCI7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRSZXN1bHQgPSBleGVjdXRpb25SZXN1bHQucmVzdWx0c1swXTtcbiAgICBjb25zdCBzdGF0ZW1lbnRBc3QgPSBzdGF0ZW1lbnRSZXN1bHQ/LmFzdDtcbiAgICBjb25zdCByZXN1bHRTdGVwczogW3sgYXN0OiBhbnk7IHJlc3VsdDogYW55IH1dID1cbiAgICAgIHN0YXRlbWVudFJlc3VsdFtcInN0ZXBzXCJdO1xuICAgIGNvbnN0IHF1ZXJ5SW50ZW50ID0gZXh0cmFjdFF1ZXJ5SW50ZW50RnJvbUFzdChzdGF0ZW1lbnRBc3QpO1xuICAgIGxldCBsYXN0UmVzdWx0ID0gdHJ1ZTtcblxuICAgIGZvciAobGV0IGkgPSByZXN1bHRTdGVwcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGkgIT0gcmVzdWx0U3RlcHMubGVuZ3RoIC0gMSkge1xuICAgICAgICBsYXN0UmVzdWx0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGVwID0gcmVzdWx0U3RlcHNbaV07XG4gICAgICBhbGxEaXNwbGF5aW5nT2JqZWN0cyA9IFtdO1xuICAgICAgLy8gY29uc29sZS5sb2coYGxhc3QgZXhlY3V0ZWQgc3RlcCAke0pTT04uc3RyaW5naWZ5KHN0ZXApfWApO1xuICAgICAgY29uc3Qgc3RlcFJlc3VsdCA9IHN0ZXAucmVzdWx0O1xuICAgICAgaWYgKHN0ZXBSZXN1bHQudHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBhbGxEaXNwbGF5aW5nT2JqZWN0cy5wdXNoKHN0ZXBSZXN1bHQpO1xuICAgICAgfSBlbHNlIGlmIChzdGVwUmVzdWx0LnR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc3RlcFJlc3VsdC52YWx1ZSkge1xuICAgICAgICAgIGFsbERpc3BsYXlpbmdPYmplY3RzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHByaW1hcnlWYWx1ZSA9XG4gICAgICAgIGFsbERpc3BsYXlpbmdPYmplY3RzLmxlbmd0aCA+IDAgPyBhbGxEaXNwbGF5aW5nT2JqZWN0c1swXS52YWx1ZSA6IG51bGw7XG4gICAgICAvLyBjaGVjayBpZiBvYmplY3QgY2FuIGJlIGRpc3BsYXllZFxuICAgICAgaWYgKGFsbERpc3BsYXlpbmdPYmplY3RzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBkaXNwbGF5aW5nT2JqZWN0VHlwZSA9IGFsbERpc3BsYXlpbmdPYmplY3RzWzBdLm9iamVjdFR5cGU7XG4gICAgICAgIGRpc3BsYXlpbmdPYmplY3QgPSBhbGxEaXNwbGF5aW5nT2JqZWN0c1swXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByaW1hcnlWYWx1ZSAmJlxuICAgICAgICAgIE9iamVjdC5oYXNPd24oYWxsRGlzcGxheWluZ09iamVjdHNbMF0sIFwidmFsdWVcIikgJiZcbiAgICAgICAgICBPYmplY3QuaGFzT3duKHByaW1hcnlWYWx1ZSwgXCJsb2NhbFN0b3JlXCIpICYmXG4gICAgICAgICAgYWxsRGlzcGxheWluZ09iamVjdHNbMF0udmFsdWUubG9jYWxTdG9yZS5fX2dlbmllT2JqZWN0VHlwZSA9PT1cbiAgICAgICAgICAgIFwiSGVscGVyQ2xhc3NcIlxuICAgICAgICApIHtcbiAgICAgICAgICBkaXNwbGF5aW5nT2JqZWN0VHlwZSA9IFwidW5kZWZpbmVkXCI7XG4gICAgICAgICAgZGlzcGxheWluZ09iamVjdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYWxsRGlzcGxheWluZ09iamVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBkaXNwbGF5aW5nT2JqZWN0VHlwZSA9IGFsbERpc3BsYXlpbmdPYmplY3RzWzBdLm9iamVjdFR5cGUgKyBcIltdXCI7XG4gICAgICAgIGRpc3BsYXlpbmdPYmplY3QgPSBhbGxEaXNwbGF5aW5nT2JqZWN0cztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByaW1hcnlWYWx1ZSAmJlxuICAgICAgICAgIE9iamVjdC5oYXNPd24oYWxsRGlzcGxheWluZ09iamVjdHNbMF0sIFwidmFsdWVcIikgJiZcbiAgICAgICAgICBPYmplY3QuaGFzT3duKHByaW1hcnlWYWx1ZSwgXCJsb2NhbFN0b3JlXCIpICYmXG4gICAgICAgICAgYWxsRGlzcGxheWluZ09iamVjdHNbMF0udmFsdWUubG9jYWxTdG9yZS5fX2dlbmllT2JqZWN0VHlwZSA9PT1cbiAgICAgICAgICAgIFwiSGVscGVyQ2xhc3NcIlxuICAgICAgICApIHtcbiAgICAgICAgICBkaXNwbGF5aW5nT2JqZWN0VHlwZSA9IFwidW5kZWZpbmVkXCI7XG4gICAgICAgICAgZGlzcGxheWluZ09iamVjdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYWxsRGlzcGxheWluZ09iamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BsYXlpbmdPYmplY3RUeXBlID0gXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgZGlzcGxheWluZ09iamVjdCA9IG51bGw7XG4gICAgICB9XG4gICAgICAvLyBpZiBkaXNwbGF5aW5nT2JqZWN0VHlwZSBpbiB0aGUga2V5cyBvZiBBbGxHZW5pZU9iamVjdEludGVyZmFjZXNcbiAgICAgIGlmIChBbGxHZW5pZU9iamVjdEludGVyZmFjZXMuc3VwcG9ydGVkVHlwZXMuaGFzKGRpc3BsYXlpbmdPYmplY3RUeXBlKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGNhbm5vdGRpc3BsYXkgPSBmYWxzZTtcbiAgICBsZXQgb25TY3JlZW4gPSB0cnVlO1xuICAgIGxldCBpbnN0YW50aWF0ZWREaXNwbGF5aW5nT2JqZWN0ID0gbnVsbDtcbiAgICBpZiAoZGlzcGxheWluZ09iamVjdCAhPSBudWxsKSB7XG4gICAgICAvLyBpZiBkaXNwbGF5aW5nT2JqZWN0IGlzIGFuIGFycmF5XG4gICAgICBpZiAoZGlzcGxheWluZ09iamVjdCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIC8vIGFsd2F5cyBkaXNwbGF5XG4gICAgICAgIG9uU2NyZWVuID0gZmFsc2U7XG4gICAgICAgIGluc3RhbnRpYXRlZERpc3BsYXlpbmdPYmplY3QgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGRpc3BsYXlpbmdPYmplY3QpIHtcbiAgICAgICAgICBjb25zdCBJbnN0YW5jZSA9IEluc3RhbnRpYXRlR2VuaWVPYmplY3Qoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBlbGVtZW50Lm9iamVjdFR5cGUsXG4gICAgICAgICAgICBrZXk6IGVsZW1lbnQudmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKEluc3RhbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNhbm5vdGRpc3BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGluc3RhbnRpYXRlZERpc3BsYXlpbmdPYmplY3QucHVzaChJbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IEluc3RhbmNlID0gSW5zdGFudGlhdGVHZW5pZU9iamVjdCh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBkaXNwbGF5aW5nT2JqZWN0Lm9iamVjdFR5cGUsXG4gICAgICAgICAga2V5OiBkaXNwbGF5aW5nT2JqZWN0LnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKEluc3RhbmNlID09PSB1bmRlZmluZWQpIGNhbm5vdGRpc3BsYXkgPSB0cnVlO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAobGFzdFJlc3VsdCkge1xuICAgICAgICAgICAgLy8gYWx3YXlzIGRpc3BsYXlcbiAgICAgICAgICAgIG9uU2NyZWVuID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIGRpc3BsYXlpbmdPYmplY3RzIGlzIG9uIHNjcmVlbiBhbHJlYWR5XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZUNsYXNzTmFtZSA9IGdldFN0YWJsZUdlbmllT2JqZWN0Q2xhc3NOYW1lKEluc3RhbmNlKTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldEludGVyZmFjZSA9IGdlbmllSW50ZXJmYWNlcy5maW5kKFxuICAgICAgICAgICAgICAoZ2VuaWVJbnRlcmZhY2UpID0+XG4gICAgICAgICAgICAgICAgZ2VuaWVJbnRlcmZhY2UuY2xhc3NOYW1lID09PSBpbnN0YW5jZUNsYXNzTmFtZSAmJlxuICAgICAgICAgICAgICAgIHNoYWxsb3dFcXVhbChcbiAgICAgICAgICAgICAgICAgIGdlbmllSW50ZXJmYWNlLmtleSxcbiAgICAgICAgICAgICAgICAgIEluc3RhbmNlLl9nZXRDb25zdHJ1Y3RvclBhcmFtcygpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXRJbnRlcmZhY2UpIHtcbiAgICAgICAgICAgICAgb25TY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbnN0YW50aWF0ZWREaXNwbGF5aW5nT2JqZWN0ID0gSW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgR2VuaWVJbnRlcnByZXRlci5ubFBhcnNlclxuICAgICAgLnJlc3BvbmQoXG4gICAgICAgIHRyYW5zY3JpcHQsXG4gICAgICAgIHBhcnNlZCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgYnVpbGRSZXN1bHREaWdlc3QoXG4gICAgICAgICAgICAvLyBub3cgd2Ugb25seSBkaXNwbGF5IHRoZSBsYXN0IHJlc3VsdFxuICAgICAgICAgICAgZXhlY3V0aW9uUmVzdWx0LnJlc3VsdHNbZXhlY3V0aW9uUmVzdWx0LnJlc3VsdHMubGVuZ3RoIC0gMV0ucmVzdWx0LFxuICAgICAgICAgICAgcGFyc2VkLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGByZXNwb25kIHJlc3VsdDogJHtyZXN1bHR9YCk7XG4gICAgICAgIGdlbmllRGlzcGF0Y2goKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlYWN0R2VuaWVTdGF0ZSA9IHNoYXJlZFN0YXRlIGFzIFJlYWN0R2VuaWVTdGF0ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZWFjdEdlbmllU3RhdGUubWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgICBvcmlnaW46IFwidm9pY2VcIixcbiAgICAgICAgICAgICAgbWVzc2FnZTogcmVzdWx0LmZ1bGxUZXh0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgcmVzdWx0RW50cnk6IFJlc3VsdFdpbmRvd0VudHJ5IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgaWYgKCFjYW5ub3RkaXNwbGF5ICYmIGFsbERpc3BsYXlpbmdPYmplY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9yZGVyZWRDb25zdHJ1Y3RvclBhcmFtcyA9IGFsbERpc3BsYXlpbmdPYmplY3RzXG4gICAgICAgICAgICAgIC5tYXAoKGRpc3BsYXlpbmdPYmplY3QpID0+XG4gICAgICAgICAgICAgICAgY3JlYXRlSW1tdXRhYmxlQ29uc3RydWN0b3JQYXJhbXNTbmFwc2hvdChkaXNwbGF5aW5nT2JqZWN0LnZhbHVlKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChwYXJhbXMpOiBwYXJhbXMgaXMgUmVjb3JkPHN0cmluZywgYW55PiA9PlxuICAgICAgICAgICAgICAgICAgcGFyYW1zICE9PSBudWxsICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChvcmRlcmVkQ29uc3RydWN0b3JQYXJhbXMubGVuZ3RoID4gMCAmJiBkaXNwbGF5aW5nT2JqZWN0VHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCBwcmVkaWN0ZWRFdmVudElkID0gcmVhY3RHZW5pZVN0YXRlLm5hdlN0YWNrICsgMTtcbiAgICAgICAgICAgICAgcmVzdWx0RW50cnkgPSBwdXRSZXN1bHRXaW5kb3dFbnRyeShyZWFjdEdlbmllU3RhdGUsIHtcbiAgICAgICAgICAgICAgICBldmVudElkOiBwcmVkaWN0ZWRFdmVudElkLFxuICAgICAgICAgICAgICAgIHJlc3VsdE9iamVjdFR5cGU6IGRpc3BsYXlpbmdPYmplY3RUeXBlLFxuICAgICAgICAgICAgICAgIG9yZGVyZWRDb25zdHJ1Y3RvclBhcmFtcyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFvblNjcmVlbiAmJiAhY2Fubm90ZGlzcGxheSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0SW50ZXJmYWNlID0gQWxsR2VuaWVPYmplY3RJbnRlcmZhY2VzLmdldEludGVyZmFjZXMoXG4gICAgICAgICAgICAgIGluc3RhbnRpYXRlZERpc3BsYXlpbmdPYmplY3QsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXRJbnRlcmZhY2UpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBObyByZWdpc3RlcmVkIEdlbmllIGludGVyZmFjZSBmb3VuZCBmb3Igb2JqZWN0IHR5cGUgXCIke2dldFN0YWJsZUdlbmllT2JqZWN0Q2xhc3NOYW1lKFxuICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGVkRGlzcGxheWluZ09iamVjdCxcbiAgICAgICAgICAgICAgICApID8/IFwidW5rbm93blwifVwiLmAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWFjdEdlbmllU3RhdGUubmF2U3RhdGUgPSB7XG4gICAgICAgICAgICAgIG9iamVjdFZpZXdDbGFzc05hbWU6IHRhcmdldEludGVyZmFjZS52aWV3Q2xhc3NOYW1lLFxuICAgICAgICAgICAgICBvYmplY3RDb25zdHJ1Y3RvclBhcmFtczpcbiAgICAgICAgICAgICAgICBhbGxEaXNwbGF5aW5nT2JqZWN0cy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICAgID8gYWxsRGlzcGxheWluZ09iamVjdHNbMF0udmFsdWUuX2dldENvbnN0cnVjdG9yUGFyYW1zKClcbiAgICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBhbGxEaXNwbGF5aW5nT2JqZWN0cy5tYXAoKGRpc3BsYXlpbmdPYmplY3QpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5aW5nT2JqZWN0LnZhbHVlLl9nZXRDb25zdHJ1Y3RvclBhcmFtcygpLFxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHF1ZXJ5SW50ZW50LFxuICAgICAgICAgICAgICByZXN1bHRSZWY6IHJlc3VsdEVudHJ5Py5yZXN1bHRSZWYgPz8gbnVsbCxcbiAgICAgICAgICAgICAgcmVzdWx0T2JqZWN0VHlwZTogZGlzcGxheWluZ09iamVjdFR5cGUgfHwgbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWFjdEdlbmllU3RhdGUubmF2U3RhY2sgKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdlcnJvciBnZW5lcmF0aW5nIHJlc3BvbnNlOicsIGVycm9yKTtcbiAgICAgICAgZ2VuaWVEaXNwYXRjaCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVhY3RHZW5pZVN0YXRlID0gc2hhcmVkU3RhdGUgYXMgUmVhY3RHZW5pZVN0YXRlO1xuICAgICAgICAgIHJlYWN0R2VuaWVTdGF0ZS5tZXNzYWdlID0gY3JlYXRlU3lzdGVtTWVzc2FnZShcbiAgICAgICAgICAgIFwiRG9uZS5cIixcbiAgICAgICAgICAgIFwiRG9uZS5cIixcbiAgICAgICAgICAgIFwiaW5mb1wiLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIC8vIGNvbnNvbGUubG9nKGBhZnRlciBleGVjdXRpbmcgc3RhdGUgJHtKU09OLnN0cmluZ2lmeShzaGFyZWRTdGF0ZSl9YCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IG5hdmlnYXRpb24gc3RhdGUgdG8gcHJldmVudCBpbmZpbml0ZSBuYXZpZ2F0aW9uIGxvb3BzXG4gKiBDYWxsIHRoaXMgYWZ0ZXIgaW50ZXJjZXB0aW5nIGFuZCBoYW5kbGluZyBuYXZpZ2F0aW9uIGluIGV4cG8tcm91dGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEdlbmllTmF2aWdhdGlvbigpIHtcbiAgZ2VuaWVEaXNwYXRjaCgoKSA9PiB7XG4gICAgY29uc3QgcmVhY3RHZW5pZVN0YXRlID0gc2hhcmVkU3RhdGUgYXMgUmVhY3RHZW5pZVN0YXRlO1xuICAgIHJlYWN0R2VuaWVTdGF0ZS5uYXZTdGF0ZSA9IHtcbiAgICAgIG9iamVjdFZpZXdDbGFzc05hbWU6IG51bGwsXG4gICAgICBvYmplY3RDb25zdHJ1Y3RvclBhcmFtczogbnVsbCxcbiAgICAgIHF1ZXJ5SW50ZW50OiBudWxsLFxuICAgICAgcmVzdWx0UmVmOiBudWxsLFxuICAgICAgcmVzdWx0T2JqZWN0VHlwZTogbnVsbCxcbiAgICB9O1xuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxrQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQU1BLElBQUFFLFdBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUgsT0FBQTtBQU9BLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUF3RSxTQUFBTSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFB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
@@ -1,7 +1,6 @@
1
1
  const fs = require("fs");
2
2
  const path = require("path");
3
3
  const { generateGenieRegistry } = require("../scripts/generate-genie-registry");
4
- const logger = require("../utils/logger")("genie-registry");
5
4
 
6
5
  function withGenieRegistry(config, options = {}) {
7
6
  const projectRoot = options.projectRoot || process.cwd();
@@ -26,7 +25,7 @@ function withGenieRegistry(config, options = {}) {
26
25
  try {
27
26
  generateGenieRegistry({ projectRoot, appDir, outFile });
28
27
  } catch (error) {
29
- logger.error(String(error));
28
+ console.error(String(error));
30
29
  }
31
30
  }, 100);
32
31
  }
@@ -34,7 +33,7 @@ function withGenieRegistry(config, options = {}) {
34
33
 
35
34
  if (watcher && watcher.on) {
36
35
  watcher.on("error", (error) => {
37
- logger.warn("[genie-registry] watcher error:", error);
36
+ console.warn("[genie-registry] watcher error:", error);
38
37
  });
39
38
  }
40
39
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@garrix82/reactgenie-lib",
3
- "version": "1.3.2",
3
+ "version": "1.3.4",
4
4
  "description": "A Toolkit for Multimodal Applications",
5
5
  "author": "Omkar Mirgal <github.com/OmkarMirgal>",
6
6
  "license": "Apache-2.0",
@@ -60,7 +60,7 @@
60
60
  "@babel/plugin-proposal-decorators": "^7.23.3",
61
61
  "@babel/preset-react": "^7.23.3",
62
62
  "@expo/vector-icons": "^13.0.0 || ^14.0.0 || ^15.0.0",
63
- "@garrix82/reactgenie-dsl": "1.0.0",
63
+ "@garrix82/reactgenie-dsl": "~1.0.0",
64
64
  "@react-native-material/core": "^1.3.7",
65
65
  "@react-navigation/stack": "^7.0.0",
66
66
  "@reduxjs/toolkit": "^2.8.2",