UNPKG

reiso

Version:
281 lines 23.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const graphql_1 = require("graphql"); const SubscriptionManager_1 = require("./GraphQL/SubscriptionManager"); var SubscriptionManager_2 = require("./GraphQL/SubscriptionManager"); exports.SubscriptionManager = SubscriptionManager_2.SubscriptionManager; exports.Subscribe = SubscriptionManager_2.Subscribe; exports.Publish = SubscriptionManager_2.Publish; const Model_1 = require("./GraphQL/Model"); const Input_1 = require("./GraphQL/Input"); let queriesModel = {}; let mutationsModel = {}; let subscriptionsModel = {}; let schema; function getSchema() { if (!schema) { schema = genSchema(); } return schema; } exports.getSchema = getSchema; let schemaSubscription; function getSubscriptionSchema() { if (!schemaSubscription) { schemaSubscription = genSubscriptionSchema(); } return schemaSubscription; } exports.getSubscriptionSchema = getSubscriptionSchema; function clearModel() { queriesModel = {}; mutationsModel = {}; subscriptionsModel = {}; schema = undefined; schemaSubscription = undefined; SubscriptionManager_1.cleanPublishes(); } exports.clearModel = clearModel; function genSchema() { const queryFields = {}; for (const key in queriesModel) { queryFields[key] = Input_1.getField(queriesModel[key]); } const mutationFields = {}; for (const key in mutationsModel) { mutationFields[key] = Input_1.getField(mutationsModel[key]); } const shema = { query: undefined, }; if (Object.keys(queryFields).length > 0) { shema.query = new graphql_1.GraphQLObjectType({ name: 'RootQuery', fields: queryFields }); } if (Object.keys(mutationFields).length > 0) { shema.mutation = new graphql_1.GraphQLObjectType({ name: 'RootMutation', fields: mutationFields }); } return new graphql_1.GraphQLSchema(shema); } function genSubscriptionSchema() { const subscriptionFields = {}; for (const key in subscriptionsModel) { subscriptionFields[key] = Input_1.getSubscriptionField(subscriptionsModel[key]); } const queryFields = {}; for (const key in queriesModel) { queryFields[key] = Input_1.getField(queriesModel[key]); } const shema = { query: undefined }; if (Object.keys(queryFields).length > 0) { shema.query = new graphql_1.GraphQLObjectType({ name: 'RootQuery', fields: queryFields }); } if (Object.keys(subscriptionFields).length > 0) { shema.subscription = new graphql_1.GraphQLObjectType({ name: 'RootSubscription', fields: subscriptionFields }); } return new graphql_1.GraphQLSchema(shema); } function Query(name) { return (target) => { const model = Reflect.getMetadata(Model_1.typeMetadataKey, target.prototype); queriesModel[name] = model; }; } exports.Query = Query; function Mutation(options) { return (target) => { const name = options.name ? options.name : target.constructor.name; const model = Reflect.getMetadata(Model_1.typeMetadataKey, target.prototype); mutationsModel[name] = model; }; } exports.Mutation = Mutation; function Structure(id, options = {}) { return (target) => { let model = Reflect.getMetadata(Model_1.typeMetadataKey, target.prototype); if (!model) { model = new Model_1.Model(); } model.id = id; model.target = target; if (options.quotaConstr) model.quotaConstr = options.quotaConstr; Object.getOwnPropertyNames(target.prototype).forEach(member => { const memberDesc = Object.getOwnPropertyDescriptor(target.prototype, member); if (typeof memberDesc.value == 'function') { if (member == 'constructor') { if (!model.constr) { model.constr = new Model_1.ModelConstructor(); } } } }); Reflect.metadata(Model_1.typeMetadataKey, model)(target.prototype); }; } exports.Structure = Structure; function Input(id, options = {}) { return (target) => { let model = Reflect.getMetadata(Model_1.inputMetadataKey, target.prototype); if (!model) { model = new Model_1.ModelInput(); } model.id = id; // model.target = target; Reflect.metadata(Model_1.inputMetadataKey, model)(target.prototype); }; } exports.Input = Input; function Subscription(type, subscribe, options = {}) { return (target) => { const name = options.name; const scope = options.scope ? options.scope : 'Main'; const model = new Model_1.ModelSub(); model.name = options.name; model.type = type; model.subscribe = subscribe; model.array = options.array; model.value = target; model.resolveType = options.resolveType; if (options.quota) model.quota = options.quota; if (!SubscriptionManager_1.getPublishes()[scope]) { SubscriptionManager_1.getPublishes()[scope] = []; } if (SubscriptionManager_1.getPublishes()[scope].indexOf(name) < 0) { SubscriptionManager_1.getPublishes()[scope].push(name); } model.args = options.args || []; subscriptionsModel[name] = model; }; } exports.Subscription = Subscription; function SubscriptionArg(type, name, options = {}) { const model = new Model_1.ModelArg(); model.array = options.array; model.name = name; model.nullable = !!options.nullable; model.type = type; model.resolveType = options.resolveType; return model; } exports.SubscriptionArg = SubscriptionArg; function Field(type, options = {}) { return (target, propertyKey) => { const name = options.name ? options.name : propertyKey; let model = Reflect.getMetadata(Model_1.typeMetadataKey, target); if (!model) { model = new Model_1.Model(); } if (!model.fields[propertyKey]) { model.fields[propertyKey] = new Model_1.ModelField(); } model.fields[propertyKey].name = name; model.fields[propertyKey].type = type; model.fields[propertyKey].substructure = options.substructure; model.fields[propertyKey].array = options.array; model.fields[propertyKey].resolveType = options.resolveType; if (options.quota) model.fields[propertyKey].quota = options.quota; Reflect.metadata(Model_1.typeMetadataKey, model)(target); }; } exports.Field = Field; function Arg(type, name, options = {}) { return (target, propertyKey, descriptor) => { let model = Reflect.getMetadata(Model_1.typeMetadataKey, target); if (!model) { model = new Model_1.Model(); } if (!propertyKey) { if (!model.constr) { model.constr = new Model_1.ModelConstructor(); } if (!model.constr.args[descriptor]) { model.constr.args[descriptor] = new Model_1.ModelArg(); } model.constr.args[descriptor].name = name; model.constr.args[descriptor].nullable = !!options.nullable; model.constr.args[descriptor].type = type; model.constr.args[descriptor].array = options.array; model.constr.args[descriptor].resolveType = options.resolveType; } else if (options.constr) { if (!model.constr) { model.constr = new Model_1.ModelConstructor(); } if (!model.constr.args[descriptor]) { model.constr.args[descriptor] = new Model_1.ModelArg(); } model.constr.args[descriptor].name = name; model.constr.args[descriptor].nullable = !!options.nullable; model.constr.args[descriptor].type = type; model.constr.args[descriptor].array = options.array; model.constr.args[descriptor].resolveType = options.resolveType; } else { if (!model.fields[propertyKey]) { model.fields[propertyKey] = new Model_1.ModelField(); } if (!model.fields[propertyKey].args[descriptor]) { model.fields[propertyKey].args[descriptor] = new Model_1.ModelArg(); } model.fields[propertyKey].args[descriptor].name = name; model.fields[propertyKey].args[descriptor].nullable = !!options.nullable; model.fields[propertyKey].args[descriptor].type = type; model.fields[propertyKey].args[descriptor].array = options.array; model.fields[propertyKey].args[descriptor].resolveType = options.resolveType; } Reflect.metadata(Model_1.typeMetadataKey, model)(target); }; } exports.Arg = Arg; function Constructor(options = {}) { return (target, propertyKey, descriptor) => { let model = Reflect.getMetadata(Model_1.typeMetadataKey, target); if (!model) { model = new Model_1.Model(); } if (!model.constr) { model.constr = new Model_1.ModelConstructor(); } model.constr.name = propertyKey; if (options.quota) model.quotaConstr = options.quota; Reflect.metadata(Model_1.typeMetadataKey, model)(target); }; } exports.Constructor = Constructor; function InputField(type, options = {}) { return (target, propertyKey) => { const name = options.name ? options.name : propertyKey; let model = Reflect.getMetadata(Model_1.inputMetadataKey, target); if (!model) { model = new Model_1.ModelInput(); } if (!model.fields[propertyKey]) { model.fields[propertyKey] = new Model_1.ModelInputField(); } model.fields[propertyKey].name = name; model.fields[propertyKey].type = type; model.fields[propertyKey].nullable = options.nullable; model.fields[propertyKey].array = options.array; model.fields[propertyKey].resolveType = options.resolveType; Reflect.metadata(Model_1.inputMetadataKey, model)(target); }; } exports.InputField = InputField; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2VydmVyL1F1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQXNNO0FBRXRNLHVFQUE2RTtBQUM3RSxxRUFJdUM7QUFIbkMsb0RBQUEsbUJBQW1CLENBQUE7QUFDbkIsMENBQUEsU0FBUyxDQUFBO0FBQ1Qsd0NBQUEsT0FBTyxDQUFBO0FBR1gsMkNBcUJ5QjtBQUN6QiwyQ0FHeUI7QUFRekIsSUFBSSxZQUFZLEdBRVosRUFBRSxDQUFDO0FBQ1AsSUFBSSxjQUFjLEdBRWQsRUFBRSxDQUFDO0FBQ1AsSUFBSSxrQkFBa0IsR0FFbEIsRUFBRSxDQUFDO0FBRVAsSUFBSSxNQUFxQixDQUFBO0FBQ3pCO0lBQ0ksSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNULE1BQU0sR0FBRyxTQUFTLEVBQUUsQ0FBQztLQUN4QjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFMRCw4QkFLQztBQUVELElBQUksa0JBQWlDLENBQUE7QUFDckM7SUFDSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7UUFDckIsa0JBQWtCLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztLQUNoRDtJQUNELE9BQU8sa0JBQWtCLENBQUM7QUFDOUIsQ0FBQztBQUxELHNEQUtDO0FBRUQ7SUFDSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDcEIsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDbkIsa0JBQWtCLEdBQUcsU0FBUyxDQUFDO0lBQy9CLG9DQUFjLEVBQUUsQ0FBQztBQUNyQixDQUFDO0FBUEQsZ0NBT0M7QUFFRDtJQUNJLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUV2QixLQUFLLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRTtRQUM1QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNsRDtJQUVELE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUUxQixLQUFLLE1BQU0sR0FBRyxJQUFJLGNBQWMsRUFBRTtRQUM5QixjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUN2RDtJQUVELE1BQU0sS0FBSyxHQUFXO1FBQ2xCLEtBQUssRUFBRSxTQUFTO0tBQ25CLENBQUE7SUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNyQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksMkJBQWlCLENBQUM7WUFDaEMsSUFBSSxFQUFFLFdBQVc7WUFDakIsTUFBTSxFQUFFLFdBQVc7U0FDdEIsQ0FBQyxDQUFDO0tBQ047SUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN4QyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksMkJBQWlCLENBQUM7WUFDbkMsSUFBSSxFQUFFLGNBQWM7WUFDcEIsTUFBTSxFQUFFLGNBQWM7U0FDekIsQ0FBQyxDQUFDO0tBQ047SUFFRCxPQUFPLElBQUksdUJBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7SUFDSSxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUU5QixLQUFLLE1BQU0sR0FBRyxJQUFJLGtCQUFrQixFQUFFO1FBQ2xDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLDRCQUFvQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDM0U7SUFFRCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFFdkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUU7UUFDNUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDbEQ7SUFFRCxNQUFNLEtBQUssR0FBVztRQUNsQixLQUFLLEVBQUUsU0FBUztLQUNuQixDQUFBO0lBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDckMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLDJCQUFpQixDQUFDO1lBQ2hDLElBQUksRUFBRSxXQUFXO1lBQ2pCLE1BQU0sRUFBRSxXQUFXO1NBQ3RCLENBQUMsQ0FBQztLQUNOO0lBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUM1QyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksMkJBQWlCLENBQUM7WUFDdkMsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixNQUFNLEVBQUUsa0JBQWtCO1NBQzdCLENBQUMsQ0FBQztLQUNOO0lBRUQsT0FBTyxJQUFJLHVCQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELGVBQXNCLElBQVk7SUFDOUIsT0FBTyxDQUFDLE1BQVcsRUFBUSxFQUFFO1FBQ3pCLE1BQU0sS0FBSyxHQUFVLE9BQU8sQ0FBQyxXQUFXLENBQUMsdUJBQWUsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUUsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDLENBQUE7QUFDTCxDQUFDO0FBTEQsc0JBS0M7QUFFRCxrQkFBeUIsT0FBdUI7SUFDNUMsT0FBTyxDQUFDLE1BQVcsRUFBUSxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ25FLE1BQU0sS0FBSyxHQUFVLE9BQU8sQ0FBQyxXQUFXLENBQUMsdUJBQWUsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUUsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDLENBQUE7QUFDTCxDQUFDO0FBTkQsNEJBTUM7QUFFRCxtQkFBMEIsRUFBVSxFQUFFLFVBQTJCLEVBQUU7SUFDL0QsT0FBTyxDQUFDLE1BQVcsRUFBTyxFQUFFO1FBQ3hCLElBQUksS0FBSyxHQUFVLE9BQU8sQ0FBQyxXQUFXLENBQUMsdUJBQWUsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLEtBQUssR0FBRyxJQUFJLGFBQUssRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDZCxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLE9BQU8sQ0FBQyxXQUFXO1lBQUUsS0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdFLElBQUksT0FBTyxVQUFVLENBQUMsS0FBSyxJQUFJLFVBQVUsRUFBRTtnQkFDdkMsSUFBSSxNQUFNLElBQUksYUFBYSxFQUFFO29CQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTt3QkFDZixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksd0JBQWdCLEVBQUUsQ0FBQztxQkFDekM7aUJBQ0o7YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvRCxDQUFDLENBQUE7QUFDTCxDQUFDO0FBckJELDhCQXFCQztBQUVELGVBQXNCLEVBQVUsRUFBRSxVQUF1QixFQUFFO0lBQ3ZELE9BQU8sQ0FBQyxNQUFXLEVBQVEsRUFBRTtRQUN6QixJQUFJLEtBQUssR0FBZSxPQUFPLENBQUMsV0FBVyxDQUFDLHdCQUFnQixFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsS0FBSyxHQUFHLElBQUksa0JBQVUsRUFBRSxDQUFDO1NBQzVCO1FBQ0QsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDZCx5QkFBeUI7UUFDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyx3QkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQyxDQUFBO0FBQ0wsQ0FBQztBQVZELHNCQVVDO0FBRUQsc0JBQTZCLElBQTZCLEVBQUUsU0FBYyxFQUFFLFVBQThCLEVBQUU7SUFDeEcsT0FBTyxDQUFDLE1BQVcsRUFBUSxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksZ0JBQVEsRUFBRSxDQUFDO1FBQzdCLEtBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUMxQixLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUM1QixLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDNUIsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDckIsS0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3hDLElBQUksT0FBTyxDQUFDLEtBQUs7WUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDL0MsSUFBSSxDQUFDLGtDQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixrQ0FBWSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxrQ0FBWSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QyxrQ0FBWSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNoQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQyxDQUFBO0FBQ0wsQ0FBQztBQXJCRCxvQ0FxQkM7QUFFRCx5QkFBZ0MsSUFBNkIsRUFBRSxJQUFZLEVBQUUsVUFBaUMsRUFBRTtJQUM1RyxNQUFNLEtBQUssR0FBRyxJQUFJLGdCQUFRLEVBQUUsQ0FBQztJQUM3QixLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDNUIsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbEIsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUNwQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixLQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDeEMsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQVJELDBDQVFDO0FBRUQsZUFBc0IsSUFBNkIsRUFBRSxVQUF1QixFQUFFO0lBQzFFLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBUSxFQUFFO1FBQzlDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUN2RCxJQUFJLEtBQUssR0FBVSxPQUFPLENBQUMsV0FBVyxDQUFDLHVCQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLEtBQUssR0FBRyxJQUFJLGFBQUssRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDNUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLGtCQUFVLEVBQUUsQ0FBQztTQUNoRDtRQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN0QyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDdEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUM5RCxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2hELEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDNUQsSUFBSSxPQUFPLENBQUMsS0FBSztZQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDbkUsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELENBQUMsQ0FBQTtBQUNMLENBQUM7QUFsQkQsc0JBa0JDO0FBRUQsYUFBb0IsSUFBNkIsRUFBRSxJQUFZLEVBQUUsVUFBcUIsRUFBRTtJQUNwRixPQUFPLENBQUMsTUFBVyxFQUFFLFdBQW1CLEVBQUUsVUFBa0IsRUFBUSxFQUFFO1FBQ2xFLElBQUksS0FBSyxHQUFVLE9BQU8sQ0FBQyxXQUFXLENBQUMsdUJBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsS0FBSyxHQUFHLElBQUksYUFBSyxFQUFFLENBQUM7U0FDdkI7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2YsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLHdCQUFnQixFQUFFLENBQUM7YUFDekM7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ2hDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksZ0JBQVEsRUFBRSxDQUFDO2FBQ2xEO1lBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUMxQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDNUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUMxQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNwRCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztTQUNuRTthQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDZixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksd0JBQWdCLEVBQUUsQ0FBQzthQUN6QztZQUNELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDaEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxnQkFBUSxFQUFFLENBQUM7YUFDbEQ7WUFDRCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQzFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUM1RCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQzFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3BELEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1NBQ25FO2FBQU07WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDNUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLGtCQUFVLEVBQUUsQ0FBQzthQUNoRDtZQUNELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDN0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxnQkFBUSxFQUFFLENBQUM7YUFDL0Q7WUFDRCxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ3ZELEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUN6RSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ3ZELEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ2pFLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1NBQ2hGO1FBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELENBQUMsQ0FBQTtBQUNMLENBQUM7QUE3Q0Qsa0JBNkNDO0FBRUQscUJBQTRCLFVBQTZCLEVBQUU7SUFDdkQsT0FBTyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFFLFVBQXdDLEVBQVEsRUFBRTtRQUN4RixJQUFJLEtBQUssR0FBVSxPQUFPLENBQUMsV0FBVyxDQUFDLHVCQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLEtBQUssR0FBRyxJQUFJLGFBQUssRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDZixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksd0JBQWdCLEVBQUUsQ0FBQztTQUN6QztRQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztRQUNoQyxJQUFJLE9BQU8sQ0FBQyxLQUFLO1lBQUUsS0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxRQUFRLENBQUMsdUJBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUE7QUFDTCxDQUFDO0FBYkQsa0NBYUM7QUFFRCxvQkFBMkIsSUFBNkIsRUFBRSxVQUE0QixFQUFFO0lBQ3BGLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBUSxFQUFFO1FBQzlDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUN2RCxJQUFJLEtBQUssR0FBZSxPQUFPLENBQUMsV0FBVyxDQUFDLHdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixLQUFLLEdBQUcsSUFBSSxrQkFBVSxFQUFFLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM1QixLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksdUJBQWUsRUFBRSxDQUFDO1NBQ3JEO1FBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN0QyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ3RELEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDaEQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUM1RCxPQUFPLENBQUMsUUFBUSxDQUFDLHdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQTtBQUNMLENBQUM7QUFqQkQsZ0NBaUJDIn0=