383 lines
59 KiB
Plaintext
383 lines
59 KiB
Plaintext
import { devAssert } from "/_nuxt/node_modules/graphql/jsutils/devAssert.mjs?v=e4f18c29";
|
|
import { inspect } from "/_nuxt/node_modules/graphql/jsutils/inspect.mjs?v=e4f18c29";
|
|
import { instanceOf } from "/_nuxt/node_modules/graphql/jsutils/instanceOf.mjs?v=e4f18c29";
|
|
import { isObjectLike } from "/_nuxt/node_modules/graphql/jsutils/isObjectLike.mjs?v=e4f18c29";
|
|
import { toObjMap } from "/_nuxt/node_modules/graphql/jsutils/toObjMap.mjs?v=e4f18c29";
|
|
import { OperationTypeNode } from "/_nuxt/node_modules/graphql/language/ast.mjs?v=e4f18c29";
|
|
import {
|
|
getNamedType,
|
|
isInputObjectType,
|
|
isInterfaceType,
|
|
isObjectType,
|
|
isUnionType,
|
|
} from "/_nuxt/node_modules/graphql/type/definition.mjs?v=e4f18c29";
|
|
import { isDirective, specifiedDirectives } from "/_nuxt/node_modules/graphql/type/directives.mjs?v=e4f18c29";
|
|
import { __Schema } from "/_nuxt/node_modules/graphql/type/introspection.mjs?v=e4f18c29";
|
|
/**
|
|
* Test if the given value is a GraphQL schema.
|
|
*/
|
|
|
|
export function isSchema(schema) {
|
|
return instanceOf(schema, GraphQLSchema);
|
|
}
|
|
export function assertSchema(schema) {
|
|
if (!isSchema(schema)) {
|
|
throw new Error(`Expected ${inspect(schema)} to be a GraphQL schema.`);
|
|
}
|
|
|
|
return schema;
|
|
}
|
|
/**
|
|
* Custom extensions
|
|
*
|
|
* @remarks
|
|
* Use a unique identifier name for your extension, for example the name of
|
|
* your library or project. Do not use a shortened identifier as this increases
|
|
* the risk of conflicts. We recommend you add at most one extension field,
|
|
* an object which can contain all the values you need.
|
|
*/
|
|
|
|
/**
|
|
* Schema Definition
|
|
*
|
|
* A Schema is created by supplying the root types of each type of operation,
|
|
* query and mutation (optional). A schema definition is then supplied to the
|
|
* validator and executor.
|
|
*
|
|
* Example:
|
|
*
|
|
* ```ts
|
|
* const MyAppSchema = new GraphQLSchema({
|
|
* query: MyAppQueryRootType,
|
|
* mutation: MyAppMutationRootType,
|
|
* })
|
|
* ```
|
|
*
|
|
* Note: When the schema is constructed, by default only the types that are
|
|
* reachable by traversing the root types are included, other types must be
|
|
* explicitly referenced.
|
|
*
|
|
* Example:
|
|
*
|
|
* ```ts
|
|
* const characterInterface = new GraphQLInterfaceType({
|
|
* name: 'Character',
|
|
* ...
|
|
* });
|
|
*
|
|
* const humanType = new GraphQLObjectType({
|
|
* name: 'Human',
|
|
* interfaces: [characterInterface],
|
|
* ...
|
|
* });
|
|
*
|
|
* const droidType = new GraphQLObjectType({
|
|
* name: 'Droid',
|
|
* interfaces: [characterInterface],
|
|
* ...
|
|
* });
|
|
*
|
|
* const schema = new GraphQLSchema({
|
|
* query: new GraphQLObjectType({
|
|
* name: 'Query',
|
|
* fields: {
|
|
* hero: { type: characterInterface, ... },
|
|
* }
|
|
* }),
|
|
* ...
|
|
* // Since this schema references only the `Character` interface it's
|
|
* // necessary to explicitly list the types that implement it if
|
|
* // you want them to be included in the final schema.
|
|
* types: [humanType, droidType],
|
|
* })
|
|
* ```
|
|
*
|
|
* Note: If an array of `directives` are provided to GraphQLSchema, that will be
|
|
* the exact list of directives represented and allowed. If `directives` is not
|
|
* provided then a default set of the specified directives (e.g. `@include` and
|
|
* `@skip`) will be used. If you wish to provide *additional* directives to these
|
|
* specified directives, you must explicitly declare them. Example:
|
|
*
|
|
* ```ts
|
|
* const MyAppSchema = new GraphQLSchema({
|
|
* ...
|
|
* directives: specifiedDirectives.concat([ myCustomDirective ]),
|
|
* })
|
|
* ```
|
|
*/
|
|
export class GraphQLSchema {
|
|
// Used as a cache for validateSchema().
|
|
constructor(config) {
|
|
var _config$extensionASTN, _config$directives;
|
|
|
|
// If this schema was built from a source known to be valid, then it may be
|
|
// marked with assumeValid to avoid an additional type system validation.
|
|
this.__validationErrors = config.assumeValid === true ? [] : undefined; // Check for common mistakes during construction to produce early errors.
|
|
|
|
isObjectLike(config) ||
|
|
devAssert(false, 'Must provide configuration object.');
|
|
!config.types ||
|
|
Array.isArray(config.types) ||
|
|
devAssert(
|
|
false,
|
|
`"types" must be Array if provided but got: ${inspect(config.types)}.`,
|
|
);
|
|
!config.directives ||
|
|
Array.isArray(config.directives) ||
|
|
devAssert(
|
|
false,
|
|
'"directives" must be Array if provided but got: ' +
|
|
`${inspect(config.directives)}.`,
|
|
);
|
|
this.description = config.description;
|
|
this.extensions = toObjMap(config.extensions);
|
|
this.astNode = config.astNode;
|
|
this.extensionASTNodes =
|
|
(_config$extensionASTN = config.extensionASTNodes) !== null &&
|
|
_config$extensionASTN !== void 0
|
|
? _config$extensionASTN
|
|
: [];
|
|
this._queryType = config.query;
|
|
this._mutationType = config.mutation;
|
|
this._subscriptionType = config.subscription; // Provide specified directives (e.g. @include and @skip) by default.
|
|
|
|
this._directives =
|
|
(_config$directives = config.directives) !== null &&
|
|
_config$directives !== void 0
|
|
? _config$directives
|
|
: specifiedDirectives; // To preserve order of user-provided types, we add first to add them to
|
|
// the set of "collected" types, so `collectReferencedTypes` ignore them.
|
|
|
|
const allReferencedTypes = new Set(config.types);
|
|
|
|
if (config.types != null) {
|
|
for (const type of config.types) {
|
|
// When we ready to process this type, we remove it from "collected" types
|
|
// and then add it together with all dependent types in the correct position.
|
|
allReferencedTypes.delete(type);
|
|
collectReferencedTypes(type, allReferencedTypes);
|
|
}
|
|
}
|
|
|
|
if (this._queryType != null) {
|
|
collectReferencedTypes(this._queryType, allReferencedTypes);
|
|
}
|
|
|
|
if (this._mutationType != null) {
|
|
collectReferencedTypes(this._mutationType, allReferencedTypes);
|
|
}
|
|
|
|
if (this._subscriptionType != null) {
|
|
collectReferencedTypes(this._subscriptionType, allReferencedTypes);
|
|
}
|
|
|
|
for (const directive of this._directives) {
|
|
// Directives are not validated until validateSchema() is called.
|
|
if (isDirective(directive)) {
|
|
for (const arg of directive.args) {
|
|
collectReferencedTypes(arg.type, allReferencedTypes);
|
|
}
|
|
}
|
|
}
|
|
|
|
collectReferencedTypes(__Schema, allReferencedTypes); // Storing the resulting map for reference by the schema.
|
|
|
|
this._typeMap = Object.create(null);
|
|
this._subTypeMap = Object.create(null); // Keep track of all implementations by interface name.
|
|
|
|
this._implementationsMap = Object.create(null);
|
|
|
|
for (const namedType of allReferencedTypes) {
|
|
if (namedType == null) {
|
|
continue;
|
|
}
|
|
|
|
const typeName = namedType.name;
|
|
typeName ||
|
|
devAssert(
|
|
false,
|
|
'One of the provided types for building the Schema is missing a name.',
|
|
);
|
|
|
|
if (this._typeMap[typeName] !== undefined) {
|
|
throw new Error(
|
|
`Schema must contain uniquely named types but contains multiple types named "${typeName}".`,
|
|
);
|
|
}
|
|
|
|
this._typeMap[typeName] = namedType;
|
|
|
|
if (isInterfaceType(namedType)) {
|
|
// Store implementations by interface.
|
|
for (const iface of namedType.getInterfaces()) {
|
|
if (isInterfaceType(iface)) {
|
|
let implementations = this._implementationsMap[iface.name];
|
|
|
|
if (implementations === undefined) {
|
|
implementations = this._implementationsMap[iface.name] = {
|
|
objects: [],
|
|
interfaces: [],
|
|
};
|
|
}
|
|
|
|
implementations.interfaces.push(namedType);
|
|
}
|
|
}
|
|
} else if (isObjectType(namedType)) {
|
|
// Store implementations by objects.
|
|
for (const iface of namedType.getInterfaces()) {
|
|
if (isInterfaceType(iface)) {
|
|
let implementations = this._implementationsMap[iface.name];
|
|
|
|
if (implementations === undefined) {
|
|
implementations = this._implementationsMap[iface.name] = {
|
|
objects: [],
|
|
interfaces: [],
|
|
};
|
|
}
|
|
|
|
implementations.objects.push(namedType);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
get [Symbol.toStringTag]() {
|
|
return 'GraphQLSchema';
|
|
}
|
|
|
|
getQueryType() {
|
|
return this._queryType;
|
|
}
|
|
|
|
getMutationType() {
|
|
return this._mutationType;
|
|
}
|
|
|
|
getSubscriptionType() {
|
|
return this._subscriptionType;
|
|
}
|
|
|
|
getRootType(operation) {
|
|
switch (operation) {
|
|
case OperationTypeNode.QUERY:
|
|
return this.getQueryType();
|
|
|
|
case OperationTypeNode.MUTATION:
|
|
return this.getMutationType();
|
|
|
|
case OperationTypeNode.SUBSCRIPTION:
|
|
return this.getSubscriptionType();
|
|
}
|
|
}
|
|
|
|
getTypeMap() {
|
|
return this._typeMap;
|
|
}
|
|
|
|
getType(name) {
|
|
return this.getTypeMap()[name];
|
|
}
|
|
|
|
getPossibleTypes(abstractType) {
|
|
return isUnionType(abstractType)
|
|
? abstractType.getTypes()
|
|
: this.getImplementations(abstractType).objects;
|
|
}
|
|
|
|
getImplementations(interfaceType) {
|
|
const implementations = this._implementationsMap[interfaceType.name];
|
|
return implementations !== null && implementations !== void 0
|
|
? implementations
|
|
: {
|
|
objects: [],
|
|
interfaces: [],
|
|
};
|
|
}
|
|
|
|
isSubType(abstractType, maybeSubType) {
|
|
let map = this._subTypeMap[abstractType.name];
|
|
|
|
if (map === undefined) {
|
|
map = Object.create(null);
|
|
|
|
if (isUnionType(abstractType)) {
|
|
for (const type of abstractType.getTypes()) {
|
|
map[type.name] = true;
|
|
}
|
|
} else {
|
|
const implementations = this.getImplementations(abstractType);
|
|
|
|
for (const type of implementations.objects) {
|
|
map[type.name] = true;
|
|
}
|
|
|
|
for (const type of implementations.interfaces) {
|
|
map[type.name] = true;
|
|
}
|
|
}
|
|
|
|
this._subTypeMap[abstractType.name] = map;
|
|
}
|
|
|
|
return map[maybeSubType.name] !== undefined;
|
|
}
|
|
|
|
getDirectives() {
|
|
return this._directives;
|
|
}
|
|
|
|
getDirective(name) {
|
|
return this.getDirectives().find((directive) => directive.name === name);
|
|
}
|
|
|
|
toConfig() {
|
|
return {
|
|
description: this.description,
|
|
query: this.getQueryType(),
|
|
mutation: this.getMutationType(),
|
|
subscription: this.getSubscriptionType(),
|
|
types: Object.values(this.getTypeMap()),
|
|
directives: this.getDirectives(),
|
|
extensions: this.extensions,
|
|
astNode: this.astNode,
|
|
extensionASTNodes: this.extensionASTNodes,
|
|
assumeValid: this.__validationErrors !== undefined,
|
|
};
|
|
}
|
|
}
|
|
|
|
function collectReferencedTypes(type, typeSet) {
|
|
const namedType = getNamedType(type);
|
|
|
|
if (!typeSet.has(namedType)) {
|
|
typeSet.add(namedType);
|
|
|
|
if (isUnionType(namedType)) {
|
|
for (const memberType of namedType.getTypes()) {
|
|
collectReferencedTypes(memberType, typeSet);
|
|
}
|
|
} else if (isObjectType(namedType) || isInterfaceType(namedType)) {
|
|
for (const interfaceType of namedType.getInterfaces()) {
|
|
collectReferencedTypes(interfaceType, typeSet);
|
|
}
|
|
|
|
for (const field of Object.values(namedType.getFields())) {
|
|
collectReferencedTypes(field.type, typeSet);
|
|
|
|
for (const arg of field.args) {
|
|
collectReferencedTypes(arg.type, typeSet);
|
|
}
|
|
}
|
|
} else if (isInputObjectType(namedType)) {
|
|
for (const field of Object.values(namedType.getFields())) {
|
|
collectReferencedTypes(field.type, typeSet);
|
|
}
|
|
}
|
|
}
|
|
|
|
return typeSet;
|
|
}
|
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNjaGVtYS5tanM/dj1lNGYxOGMyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXZBc3NlcnQgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL2pzdXRpbHMvZGV2QXNzZXJ0Lm1qcz92PWU0ZjE4YzI5XCI7XG5pbXBvcnQgeyBpbnNwZWN0IH0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC9qc3V0aWxzL2luc3BlY3QubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7IGluc3RhbmNlT2YgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL2pzdXRpbHMvaW5zdGFuY2VPZi5tanM/dj1lNGYxOGMyOVwiO1xuaW1wb3J0IHsgaXNPYmplY3RMaWtlIH0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC9qc3V0aWxzL2lzT2JqZWN0TGlrZS5tanM/dj1lNGYxOGMyOVwiO1xuaW1wb3J0IHsgdG9PYmpNYXAgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL2pzdXRpbHMvdG9PYmpNYXAubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7IE9wZXJhdGlvblR5cGVOb2RlIH0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC9sYW5ndWFnZS9hc3QubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7XG4gIGdldE5hbWVkVHlwZSxcbiAgaXNJbnB1dE9iamVjdFR5cGUsXG4gIGlzSW50ZXJmYWNlVHlwZSxcbiAgaXNPYmplY3RUeXBlLFxuICBpc1VuaW9uVHlwZSxcbn0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC90eXBlL2RlZmluaXRpb24ubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7IGlzRGlyZWN0aXZlLCBzcGVjaWZpZWREaXJlY3RpdmVzIH0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC90eXBlL2RpcmVjdGl2ZXMubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7IF9fU2NoZW1hIH0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC90eXBlL2ludHJvc3BlY3Rpb24ubWpzP3Y9ZTRmMThjMjlcIjtcbi8qKlxuICogVGVzdCBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBHcmFwaFFMIHNjaGVtYS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNTY2hlbWEoc2NoZW1hKSB7XG4gIHJldHVybiBpbnN0YW5jZU9mKHNjaGVtYSwgR3JhcGhRTFNjaGVtYSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0U2NoZW1hKHNjaGVtYSkge1xuICBpZiAoIWlzU2NoZW1hKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7aW5zcGVjdChzY2hlbWEpfSB0byBiZSBhIEdyYXBoUUwgc2NoZW1hLmApO1xuICB9XG5cbiAgcmV0dXJuIHNjaGVtYTtcbn1cbi8qKlxuICogQ3VzdG9tIGV4dGVuc2lvbnNcbiAqXG4gKiBAcmVtYXJrc1xuICogVXNlIGEgdW5pcXVlIGlkZW50aWZpZXIgbmFtZSBmb3IgeW91ciBleHRlbnNpb24sIGZvciBleGFtcGxlIHRoZSBuYW1lIG9mXG4gKiB5b3VyIGxpYnJhcnkgb3IgcHJvamVjdC4gRG8gbm90IHVzZSBhIHNob3J0ZW5lZCBpZGVudGlmaWVyIGFzIHRoaXMgaW5jcmVhc2VzXG4gKiB0aGUgcmlzayBvZiBjb25mbGljdHMuIFdlIHJlY29tbWVuZCB5b3UgYWRkIGF0IG1vc3Qgb25lIGV4dGVuc2lvbiBmaWVsZCxcbiAqIGFuIG9iamVjdCB3aGljaCBjYW4gY29udGFpbiBhbGwgdGhlIHZhbHVlcyB5b3UgbmVlZC5cbiAqL1xuXG4vKipcbiAqIFNjaGVtYSBEZWZpbml0aW9uXG4gKlxuICogQSBTY2hlbWEgaXMgY3JlYXRlZCBieSBzdXBwbHlpbmcgdGhlIHJvb3QgdHlwZXMgb2YgZWFjaCB0eXBlIG9mIG9wZXJhdGlvbixcbiAqIHF1ZXJ5IGFuZCBtdXRhdGlvbiAob3B0aW9uYWwpLiBBIHNjaGVtYSBkZWZpbml0aW9uIGlzIHRoZW4gc3VwcGxpZWQgdG8gdGhlXG4gKiB2YWxpZGF0b3IgYW5kIGV4ZWN1dG9yLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IE15QXBwU2NoZW1hID0gbmV3IEdyYXBoUUxTY2hlbWEoe1xuICogICBxdWVyeTogTXlBcHBRdWVyeVJvb3RUeXBlLFxuICogICBtdXRhdGlvbjogTXlBcHBNdXRhdGlvblJvb3RUeXBlLFxuICogfSlcbiAqIGBgYFxuICpcbiAqIE5vdGU6IFdoZW4gdGhlIHNjaGVtYSBpcyBjb25zdHJ1Y3RlZCwgYnkgZGVmYXVsdCBvbmx5IHRoZSB0eXBlcyB0aGF0IGFyZVxuICogcmVhY2hhYmxlIGJ5IHRyYXZlcnNpbmcgdGhlIHJvb3QgdHlwZXMgYXJlIGluY2x1ZGVkLCBvdGhlciB0eXBlcyBtdXN0IGJlXG4gKiBleHBsaWNpdGx5IHJlZmVyZW5jZWQuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY2hhcmFjdGVySW50ZXJmYWNlID0gbmV3IEdyYXBoUUxJbnRlcmZhY2VUeXBlKHtcbiAqICAgbmFtZTogJ0NoYXJhY3RlcicsXG4gKiAgIC4uLlxuICogfSk7XG4gKlxuICogY29uc3QgaHVtYW5UeXBlID0gbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAqICAgbmFtZTogJ0h1bWFuJyxcbiAqICAgaW50ZXJmYWNlczogW2NoYXJhY3RlckludGVyZmFjZV0sXG4gKiAgIC4uLlxuICogfSk7XG4gKlxuICogY29uc3QgZHJvaWRUeXBlID0gbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAqICAgbmFtZTogJ0Ryb2lkJyxcbiAqICAgaW50ZXJmYWNlczogW2NoYXJhY3RlckludGVyZmFjZV0sXG4gKiAgIC4uLlxuICogfSk7XG4gKlxuICogY29uc3Qgc2NoZW1hID0gbmV3IEdyYXBoUUxTY2hlbWEoe1xuICogICBxdWVyeTogbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAqICAgICBuYW1lOiAnUXVlcnknLFxuICogICAgIGZpZWxkczoge1xuICogICAgICAgaGVybzogeyB0eXBlOiBjaGFyYWN0ZXJJbnRlcmZhY2UsIC4uLiB9LFxuICogICAgIH1cbiAqICAgfSksXG4gKiAgIC4uLlxuICogICAvLyBTaW5jZSB0aGlzIHNjaGVtYSByZWZlcmVuY2VzIG9ubHkgdGhlIGBDaGFyYWN0ZXJgIGludGVyZmFjZSBpdCdzXG4gKiAgIC8vIG5lY2Vzc2FyeSB0byBleHBsaWNpdGx5IGxpc3QgdGhlIHR5cGVzIHRoYXQgaW1wbGVtZW50IGl0IGlmXG4gKiAgIC8vIHlvdSB3YW50IHRoZW0gdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHNjaGVtYS5cbiAqICAgdHlwZXM6IFtodW1hblR5cGUsIGRyb2lkVHlwZV0sXG4gKiB9KVxuICogYGBgXG4gKlxuICogTm90ZTogSWYgYW4gYXJyYXkgb2YgYGRpcmVjdGl2ZXNgIGFyZSBwcm92aWRlZCB0byBHcmFwaFFMU2NoZW1hLCB0aGF0IHdpbGwgYmVcbiAqIHRoZSBleGFjdCBsaXN0IG9mIGRpcmVjdGl2ZXMgcmVwcmVzZW50ZWQgYW5kIGFsbG93ZWQuIElmIGBkaXJlY3RpdmVzYCBpcyBub3RcbiAqIHByb3ZpZGVkIHRoZW4gYSBkZWZhdWx0IHNldCBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdGl2ZXMgKGUuZy4gYEBpbmNsdWRlYCBhbmRcbiAqIGBAc2tpcGApIHdpbGwgYmUgdXNlZC4gSWYgeW91IHdpc2ggdG8gcHJvdmlkZSAqYWRkaXRpb25hbCogZGlyZWN0aXZlcyB0byB0aGVzZVxuICogc3BlY2lmaWVkIGRpcmVjdGl2ZXMsIHlvdSBtdXN0IGV4cGxpY2l0bHkgZGVjbGFyZSB0aGVtLiBFeGFtcGxlOlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBNeUFwcFNjaGVtYSA9IG5ldyBHcmFwaFFMU2NoZW1hKHtcbiAqICAgLi4uXG4gKiAgIGRpcmVjdGl2ZXM6IHNwZWNpZmllZERpcmVjdGl2ZXMuY29uY2F0KFsgbXlDdXN0b21EaXJlY3RpdmUgXSksXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaFFMU2NoZW1hIHtcbiAgLy8gVXNlZCBhcyBhIGNhY2hlIGZvciB2YWxpZGF0ZVNjaGVtYSgpLlxuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB2YXIgX2NvbmZpZyRleHRlbnNpb25BU1ROLCBfY29uZmlnJGRpcmVjdGl2ZXM7XG5cbiAgICAvLyBJZiB0aGlzIHNjaGVtYSB3YXMgYnVpbHQgZnJvbSBhIHNvdXJjZSBrbm93biB0byBiZSB2YWxpZCwgdGhlbiBpdCBtYXkgYmVcbiAgICAvLyBtYXJrZWQgd2l0aCBhc3N1bWVWYWxpZCB0byBhdm9pZCBhbiBhZGRpdGlvbmFsIHR5cGUgc3lzdGVtIHZhbGlkYXRpb24uXG4gICAgdGhpcy5fX3ZhbGlkYXRpb25FcnJvcnMgPSBjb25maWcuYXNzdW1lVmFsaWQgPT09IHRydWUgPyBbXSA6IHVuZGVmaW5lZDsgLy8gQ2hlY2sgZm9yIGNvbW1vbiBtaXN0YWtlcyBkdXJpbmcgY29uc3RydWN0aW9uIHRvIHByb2R1Y2UgZWFybHkgZXJyb3JzLlxuXG4gICAgaXNPYmplY3RMaWtlKGNvbmZpZykgfHxcbiAgICAgIGRldkFzc2VydChmYWxzZSwgJ011c3QgcHJvdmlkZSBjb25maWd1cmF0aW9uIG9iamVjdC4nKTtcbiAgICAhY29uZmlnLnR5cGVzIHx8XG4gICAgICBBcnJheS5pc0FycmF5KGNvbmZpZy50eXBlcykgfHxcbiAgICAgIGRldkFzc2VydChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGBcInR5cGVzXCIgbXVzdCBiZSBBcnJheSBpZiBwcm92aWRlZCBidXQgZ290OiAke2luc3BlY3QoY29uZmlnLnR5cGVzKX0uYCxcbiAgICAgICk7XG4gICAgIWNvbmZpZy5kaXJlY3RpdmVzIHx8XG4gICAgICBBcnJheS5pc0FycmF5KGNvbmZpZy5kaXJlY3RpdmVzKSB8fFxuICAgICAgZGV2QXNzZXJ0KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ1wiZGlyZWN0aXZlc1wiIG11c3QgYmUgQXJyYXkgaWYgcHJvdmlkZWQgYnV0IGdvdDogJyArXG4gICAgICAgICAgYCR7aW5zcGVjdChjb25maWcuZGlyZWN0aXZlcyl9LmAsXG4gICAgICApO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBjb25maWcuZGVzY3JpcHRpb247XG4gICAgdGhpcy5leHRlbnNpb25zID0gdG9PYmpNYXAoY29uZmlnLmV4dGVuc2lvbnMpO1xuICAgIHRoaXMuYXN0Tm9kZSA9IGNvbmZpZy5hc3ROb2RlO1xuICAgIHRoaXMuZXh0ZW5zaW9uQVNUTm9kZXMgPVxuICAgICAgKF9jb25maWckZXh0ZW5zaW9uQVNUTiA9IGNvbmZpZy5leHRlbnNpb25BU1ROb2RlcykgIT09IG51bGwgJiZcbiAgICAgIF9jb25maWckZXh0ZW5zaW9uQVNUTiAhPT0gdm9pZCAwXG4gICAgICAgID8gX2NvbmZpZyRleHRlbnNpb25BU1ROXG4gICAgICAgIDogW107XG4gICAgdGhpcy5fcXVlcnlUeXBlID0gY29uZmlnLnF1ZXJ5O1xuICAgIHRoaXMuX211dGF0aW9uVHlwZSA9IGNvbmZpZy5tdXRhdGlvbjtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25UeXBlID0gY29uZmlnLnN1YnNjcmlwdGlvbjsgLy8gUHJvdmlkZSBzcGVjaWZpZWQgZGlyZWN0aXZlcyAoZS5nLiBAaW5jbHVkZSBhbmQgQHNraXApIGJ5IGRlZmF1bHQuXG5cbiAgICB0aGlzLl9kaXJlY3RpdmVzID1cbiAgICAgIChfY29uZmlnJGRpcmVjdGl2ZXMgPSBjb25maWcuZGlyZWN0aXZlcykgIT09IG51bGwgJiZcbiAgICAgIF9jb25maWckZGlyZWN0aXZlcyAhPT0gdm9pZCAwXG4gICAgICAgID8gX2NvbmZpZyRkaXJlY3RpdmVzXG4gICAgICAgIDogc3BlY2lmaWVkRGlyZWN0aXZlczsgLy8gVG8gcHJlc2VydmUgb3JkZXIgb2YgdXNlci1wcm92aWRlZCB0eXBlcywgd2UgYWRkIGZpcnN0IHRvIGFkZCB0aGVtIHRvXG4gICAgLy8gdGhlIHNldCBvZiBcImNvbGxlY3RlZFwiIHR5cGVzLCBzbyBgY29sbGVjdFJlZmVyZW5jZWRUeXBlc2AgaWdub3JlIHRoZW0uXG5cbiAgICBjb25zdCBhbGxSZWZlcmVuY2VkVHlwZXMgPSBuZXcgU2V0KGNvbmZpZy50eXBlcyk7XG5cbiAgICBpZiAoY29uZmlnLnR5cGVzICE9IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBjb25maWcudHlwZXMpIHtcbiAgICAgICAgLy8gV2hlbiB3ZSByZWFkeSB0byBwcm9jZXNzIHRoaXMgdHlwZSwgd2UgcmVtb3ZlIGl0IGZyb20gXCJjb2xsZWN0ZWRcIiB0eXBlc1xuICAgICAgICAvLyBhbmQgdGhlbiBhZGQgaXQgdG9nZXRoZXIgd2l0aCBhbGwgZGVwZW5kZW50IHR5cGVzIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uLlxuICAgICAgICBhbGxSZWZlcmVuY2VkVHlwZXMuZGVsZXRlKHR5cGUpO1xuICAgICAgICBjb2xsZWN0UmVmZXJlbmNlZFR5cGVzKHR5cGUsIGFsbFJlZmVyZW5jZWRUeXBlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3F1ZXJ5VHlwZSAhPSBudWxsKSB7XG4gICAgICBjb2xsZWN0UmVmZXJlbmNlZFR5cGVzKHRoaXMuX3F1ZXJ5VHlwZSwgYWxsUmVmZXJlbmNlZFR5cGVzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbXV0YXRpb25UeXBlICE9IG51bGwpIHtcbiAgICAgIGNvbGxlY3RSZWZlcmVuY2VkVHlwZXModGhpcy5fbXV0YXRpb25UeXBlLCBhbGxSZWZlcmVuY2VkVHlwZXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdWJzY3JpcHRpb25UeXBlICE9IG51bGwpIHtcbiAgICAgIGNvbGxlY3RSZWZlcmVuY2VkVHlwZXModGhpcy5fc3Vic2NyaXB0aW9uVHlwZSwgYWxsUmVmZXJlbmNlZFR5cGVzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRpcmVjdGl2ZSBvZiB0aGlzLl9kaXJlY3RpdmVzKSB7XG4gICAgICAvLyBEaXJlY3RpdmVzIGFyZSBub3QgdmFsaWRhdGVkIHVudGlsIHZhbGlkYXRlU2NoZW1hKCkgaXMgY2FsbGVkLlxuICAgICAgaWYgKGlzRGlyZWN0aXZlKGRpcmVjdGl2ZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgZGlyZWN0aXZlLmFyZ3MpIHtcbiAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlZFR5cGVzKGFyZy50eXBlLCBhbGxSZWZlcmVuY2VkVHlwZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29sbGVjdFJlZmVyZW5jZWRUeXBlcyhfX1NjaGVtYSwgYWxsUmVmZXJlbmNlZFR5cGVzKTsgLy8gU3RvcmluZyB0aGUgcmVzdWx0aW5nIG1hcCBmb3IgcmVmZXJlbmNlIGJ5IHRoZSBzY2hlbWEuXG5cbiAgICB0aGlzLl90eXBlTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9zdWJUeXBlTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTsgLy8gS2VlcCB0cmFjayBvZiBhbGwgaW1wbGVtZW50YXRpb25zIGJ5IGludGVyZmFjZSBuYW1lLlxuXG4gICAgdGhpcy5faW1wbGVtZW50YXRpb25zTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGZvciAoY29uc3QgbmFtZWRUeXBlIG9mIGFsbFJlZmVyZW5jZWRUeXBlcykge1xuICAgICAgaWYgKG5hbWVkVHlwZSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0eXBlTmFtZSA9IG5hbWVkVHlwZS5uYW1lO1xuICAgICAgdHlwZU5hbWUgfHxcbiAgICAgICAgZGV2QXNzZXJ0KFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICdPbmUgb2YgdGhlIHByb3ZpZGVkIHR5cGVzIGZvciBidWlsZGluZyB0aGUgU2NoZW1hIGlzIG1pc3NpbmcgYSBuYW1lLicsXG4gICAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLl90eXBlTWFwW3R5cGVOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2NoZW1hIG11c3QgY29udGFpbiB1bmlxdWVseSBuYW1lZCB0eXBlcyBidXQgY29udGFpbnMgbXVsdGlwbGUgdHlwZXMgbmFtZWQgXCIke3R5cGVOYW1lfVwiLmAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3R5cGVNYXBbdHlwZU5hbWVdID0gbmFtZWRUeXBlO1xuXG4gICAgICBpZiAoaXNJbnRlcmZhY2VUeXBlKG5hbWVkVHlwZSkpIHtcbiAgICAgICAgLy8gU3RvcmUgaW1wbGVtZW50YXRpb25zIGJ5IGludGVyZmFjZS5cbiAgICAgICAgZm9yIChjb25zdCBpZmFjZSBvZiBuYW1lZFR5cGUuZ2V0SW50ZXJmYWNlcygpKSB7XG4gICAgICAgICAgaWYgKGlzSW50ZXJmYWNlVHlwZShpZmFjZSkpIHtcbiAgICAgICAgICAgIGxldCBpbXBsZW1lbnRhdGlvbnMgPSB0aGlzLl9pbXBsZW1lbnRhdGlvbnNNYXBbaWZhY2UubmFtZV07XG5cbiAgICAgICAgICAgIGlmIChpbXBsZW1lbnRhdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgPSB0aGlzLl9pbXBsZW1lbnRhdGlvbnNNYXBbaWZhY2UubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0czogW10sXG4gICAgICAgICAgICAgICAgaW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5pbnRlcmZhY2VzLnB1c2gobmFtZWRUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3RUeXBlKG5hbWVkVHlwZSkpIHtcbiAgICAgICAgLy8gU3RvcmUgaW1wbGVtZW50YXRpb25zIGJ5IG9iamVjdHMuXG4gICAgICAgIGZvciAoY29uc3QgaWZhY2Ugb2YgbmFtZWRUeXBlLmdldEludGVyZmFjZXMoKSkge1xuICAgICAgICAgIGlmIChpc0ludGVyZmFjZVR5cGUoaWZhY2UpKSB7XG4gICAgICAgICAgICBsZXQgaW1wbGVtZW50YXRpb25zID0gdGhpcy5faW1wbGVtZW50YXRpb25zTWFwW2lmYWNlLm5hbWVdO1xuXG4gICAgICAgICAgICBpZiAoaW1wbGVtZW50YXRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zID0gdGhpcy5faW1wbGVtZW50YXRpb25zTWFwW2lmYWNlLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgIG9iamVjdHM6IFtdLFxuICAgICAgICAgICAgICAgIGludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMub2JqZWN0cy5wdXNoKG5hbWVkVHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnR3JhcGhRTFNjaGVtYSc7XG4gIH1cblxuICBnZXRRdWVyeVR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5VHlwZTtcbiAgfVxuXG4gIGdldE11dGF0aW9uVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbXV0YXRpb25UeXBlO1xuICB9XG5cbiAgZ2V0U3Vic2NyaXB0aW9uVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaXB0aW9uVHlwZTtcbiAgfVxuXG4gIGdldFJvb3RUeXBlKG9wZXJhdGlvbikge1xuICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7XG4gICAgICBjYXNlIE9wZXJhdGlvblR5cGVOb2RlLlFVRVJZOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeVR5cGUoKTtcblxuICAgICAgY2FzZSBPcGVyYXRpb25UeXBlTm9kZS5NVVRBVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TXV0YXRpb25UeXBlKCk7XG5cbiAgICAgIGNhc2UgT3BlcmF0aW9uVHlwZU5vZGUuU1VCU0NSSVBUSU9OOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdWJzY3JpcHRpb25UeXBlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VHlwZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZU1hcDtcbiAgfVxuXG4gIGdldFR5cGUobmFtZSkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVNYXAoKVtuYW1lXTtcbiAgfVxuXG4gIGdldFBvc3NpYmxlVHlwZXMoYWJzdHJhY3RUeXBlKSB7XG4gICAgcmV0dXJuIGlzVW5pb25UeXBlKGFic3RyYWN0VHlwZSlcbiAgICAgID8gYWJzdHJhY3RUeXBlLmdldFR5cGVzKClcbiAgICAgIDogdGhpcy5nZXRJbXBsZW1lbnRhdGlvbnMoYWJzdHJhY3RUeXBlKS5vYmplY3RzO1xuICB9XG5cbiAgZ2V0SW1wbGVtZW50YXRpb25zKGludGVyZmFjZVR5cGUpIHtcbiAgICBjb25zdCBpbXBsZW1lbnRhdGlvbnMgPSB0aGlzLl9pbXBsZW1lbnRhdGlvbnNNYXBbaW50ZXJmYWNlVHlwZS5uYW1lXTtcbiAgICByZXR1cm4gaW1wbGVtZW50YXRpb25zICE9PSBudWxsICYmIGltcGxlbWVudGF0aW9ucyAhPT0gdm9pZCAwXG4gICAgICA/IGltcGxlbWVudGF0aW9uc1xuICAgICAgOiB7XG4gICAgICAgICAgb2JqZWN0czogW10sXG4gICAgICAgICAgaW50ZXJmYWNlczogW10sXG4gICAgICAgIH07XG4gIH1cblxuICBpc1N1YlR5cGUoYWJzdHJhY3RUeXBlLCBtYXliZVN1YlR5cGUpIHtcbiAgICBsZXQgbWFwID0gdGhpcy5fc3ViVHlwZU1hcFthYnN0cmFjdFR5cGUubmFtZV07XG5cbiAgICBpZiAobWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGlmIChpc1VuaW9uVHlwZShhYnN0cmFjdFR5cGUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBhYnN0cmFjdFR5cGUuZ2V0VHlwZXMoKSkge1xuICAgICAgICAgIG1hcFt0eXBlLm5hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW1wbGVtZW50YXRpb25zID0gdGhpcy5nZXRJbXBsZW1lbnRhdGlvbnMoYWJzdHJhY3RUeXBlKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgaW1wbGVtZW50YXRpb25zLm9iamVjdHMpIHtcbiAgICAgICAgICBtYXBbdHlwZS5uYW1lXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgaW1wbGVtZW50YXRpb25zLmludGVyZmFjZXMpIHtcbiAgICAgICAgICBtYXBbdHlwZS5uYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3ViVHlwZU1hcFthYnN0cmFjdFR5cGUubmFtZV0gPSBtYXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcFttYXliZVN1YlR5cGUubmFtZV0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldERpcmVjdGl2ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RpcmVjdGl2ZXM7XG4gIH1cblxuICBnZXREaXJlY3RpdmUobmFtZSkge1xuICAgIHJldHVybiB0aGlzLmdldERpcmVjdGl2ZXMoKS5maW5kKChkaXJlY3RpdmUpID0+IGRpcmVjdGl2ZS5uYW1lID09PSBuYW1lKTtcbiAgfVxuXG4gIHRvQ29uZmlnKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIHF1ZXJ5OiB0aGlzLmdldFF1ZXJ5VHlwZSgpLFxuICAgICAgbXV0YXRpb246IHRoaXMuZ2V0TXV0YXRpb25UeXBlKCksXG4gICAgICBzdWJzY3JpcHRpb246IHRoaXMuZ2V0U3Vic2NyaXB0aW9uVHlwZSgpLFxuICAgICAgdHlwZXM6IE9iamVjdC52YWx1ZXModGhpcy5nZXRUeXBlTWFwKCkpLFxuICAgICAgZGlyZWN0aXZlczogdGhpcy5nZXREaXJlY3RpdmVzKCksXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmV4dGVuc2lvbnMsXG4gICAgICBhc3ROb2RlOiB0aGlzLmFzdE5vZGUsXG4gICAgICBleHRlbnNpb25BU1ROb2RlczogdGhpcy5leHRlbnNpb25BU1ROb2RlcyxcbiAgICAgIGFzc3VtZVZhbGlkOiB0aGlzLl9fdmFsaWRhdGlvbkVycm9ycyAhPT0gdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdFJlZmVyZW5jZWRUeXBlcyh0eXBlLCB0eXBlU2V0KSB7XG4gIGNvbnN0IG5hbWVkVHlwZSA9IGdldE5hbWVkVHlwZSh0eXBlKTtcblxuICBpZiAoIXR5cGVTZXQuaGFzKG5hbWVkVHlwZSkpIHtcbiAgICB0eXBlU2V0LmFkZChuYW1lZFR5cGUpO1xuXG4gICAgaWYgKGlzVW5pb25UeXBlKG5hbWVkVHlwZSkpIHtcbiAgICAgIGZvciAoY29uc3QgbWVtYmVyVHlwZSBvZiBuYW1lZFR5cGUuZ2V0VHlwZXMoKSkge1xuICAgICAgICBjb2xsZWN0UmVmZXJlbmNlZFR5cGVzKG1lbWJlclR5cGUsIHR5cGVTZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3RUeXBlKG5hbWVkVHlwZSkgfHwgaXNJbnRlcmZhY2VUeXBlKG5hbWVkVHlwZSkpIHtcbiAgICAgIGZvciAoY29uc3QgaW50ZXJmYWNlVHlwZSBvZiBuYW1lZFR5cGUuZ2V0SW50ZXJmYWNlcygpKSB7XG4gICAgICAgIGNvbGxlY3RSZWZlcmVuY2VkVHlwZXMoaW50ZXJmYWNlVHlwZSwgdHlwZVNldCk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgT2JqZWN0LnZhbHVlcyhuYW1lZFR5cGUuZ2V0RmllbGRzKCkpKSB7XG4gICAgICAgIGNvbGxlY3RSZWZlcmVuY2VkVHlwZXMoZmllbGQudHlwZSwgdHlwZVNldCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgZmllbGQuYXJncykge1xuICAgICAgICAgIGNvbGxlY3RSZWZlcmVuY2VkVHlwZXMoYXJnLnR5cGUsIHR5cGVTZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0lucHV0T2JqZWN0VHlwZShuYW1lZFR5cGUpKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIE9iamVjdC52YWx1ZXMobmFtZWRUeXBlLmdldEZpZWxkcygpKSkge1xuICAgICAgICBjb2xsZWN0UmVmZXJlbmNlZFR5cGVzKGZpZWxkLnR5cGUsIHR5cGVTZXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0eXBlU2V0O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDeEYsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNwRixNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzFGLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FB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Q0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDdEUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLO0FBQzFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUk7QUFDdEQsQ0FBQyxDQUFDOztBQUVGLENBQUMsQ0FBQztBQUNGLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNWLENBQUM7QUFDRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUztBQUM1RSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQzFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUTtBQUN6QixDQUFDO0FBQ0QsQ0FBQyxDQUFDLENBQUMsT0FBTztBQUNWLENBQUM7QUFDRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7QUFDekMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQjtBQUM5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMscUJBQXFCO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBQ0QsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3hFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUN6RSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVTtBQUN4QixDQUFDO0FBQ0QsQ0FBQyxDQUFDLENBQUMsT0FBTztBQUNWLENBQUM7QUFDRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO0FBQ3ZELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztBQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7QUFDckMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7QUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO0FBQ3JDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBQ0QsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0FBQ2xDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO0FBQ3ZFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztBQUNqRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUN4RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzlFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDNUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzVFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7QUFDNUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPO0FBQ2xFLENBQUM7QUFDRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7QUFDekMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7QUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVU7O0FBRWpELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUM3RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7QUFDNUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNOztBQUVwSixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FB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RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLGtCQUFrQixDQUFDO0FBQzlELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFSixDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRWxILENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUk7O0FBRWxHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzs7QUFFbEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtBQUNoQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFTixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztBQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7QUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRVQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7QUFDdkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRU4sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUzs7QUFFekMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFNBQVM7QUFDN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzs7QUFFdEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFWixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDdEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLE9BQU87QUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzs7QUFFdEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFWixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDbkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQzs7QUFFRixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQztBQUMxQixDQUFDLENBQUM7O0FBRUYsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVU7QUFDMUIsQ0FBQyxDQUFDOztB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a0IsQ0FBQyxZQUFZLENBQUM7O0FBRXJFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO0FBQy9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFUixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtBQUMvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFTixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRztBQUMvQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVKLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0FBQy9DLENBQUMsQ0FBQzs7QUFFRixDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVztBQUMzQixDQUFDLENBQUM7O0FBRUYsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzVFLENBQUMsQ0FBQzs7QUFFRixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVc7QUFDbkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVTtBQUNqQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMs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 |