@schoolbelle/common
Version:
Demo library to showcase Angular packaging format
213 lines (204 loc) • 16.6 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('lodash')) :
typeof define === 'function' && define.amd ? define('@schoolbelle/common/services/infinite-scroll-list', ['exports', '@angular/core', 'rxjs', 'lodash'], factory) :
(factory((global.schoolbelle = global.schoolbelle || {}, global.schoolbelle.common = global.schoolbelle.common || {}, global.schoolbelle.common.services = global.schoolbelle.common.services || {}, global.schoolbelle.common.services['infinite-scroll-list'] = {}),global.ng.core,global.rxjs,null));
}(this, (function (exports,core,rxjs,lodash) { 'use strict';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var InfiniteScrollListConfigDefault = (function () {
function InfiniteScrollListConfigDefault() {
this.debounce = 400;
this.max_size_per_query = 10;
}
return InfiniteScrollListConfigDefault;
}());
var /** @type {?} */ INFINITE_SCROLL_LIST_CONFIG_TOKEN = new core.InjectionToken('InfiniteScrollListConfigInterface');
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var InfiniteScrollListModule = (function () {
function InfiniteScrollListModule() {
}
/**
* @param {?=} options
* @return {?}
*/
InfiniteScrollListModule.forRoot = /**
* @param {?=} options
* @return {?}
*/
function (options) {
if (options === void 0) {
options = {};
}
return {
ngModule: InfiniteScrollListModule,
providers: []
};
};
InfiniteScrollListModule.decorators = [
{ type: core.NgModule, args: [{},] },
];
return InfiniteScrollListModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var InfiniteScrollListService = (function () {
function InfiniteScrollListService() {
/**
* \@property disabled
* you can mark the list as disable for example when there is no more to fetch.
*/
this.disabled = false;
/**
* \@property token
* when promise or observable are pushed, the resolve or emitted value of them can become unwanted.
* in this case, specify token when pushing them and change the token to something else
* so infinite list will defy the return value.
*/
this.token = '';
this._list = [];
this.listChangeEvent = new rxjs.BehaviorSubject(this._list);
}
Object.defineProperty(InfiniteScrollListService.prototype, "list", {
get: /**
* @return {?}
*/ function () {
return this.listChangeEvent.asObservable();
},
enumerable: true,
configurable: true
});
/**
* @param {?} li
* @param {?=} token
* @return {?}
*/
InfiniteScrollListService.prototype.push = /**
* @param {?} li
* @param {?=} token
* @return {?}
*/
function (li, token) {
var _this = this;
if (token === void 0) {
token = '';
}
this.token = token;
if (li instanceof Promise) {
li.then(function (resolvedLi) {
if (token !== _this.token)
return;
if (Array.isArray(resolvedLi))
resolvedLi.forEach(function (each) { return _this._list.push(each); });
else
_this._list.push(resolvedLi);
// this.listChangeEvent.next(this._list);
});
return li;
}
else if (li instanceof rxjs.Observable) {
var /** @type {?} */ subscription_1 = li.subscribe(function (emittedLi) {
if (token !== _this.token)
return;
if (Array.isArray(emittedLi))
emittedLi.forEach(function (each) { return _this._list.push(each); });
else
_this._list.push(emittedLi);
// this.listChangeEvent.next(this._list);
// this.listChangeEvent.next(this._list);
subscription_1.unsubscribe();
});
return li.toPromise();
}
else if (Array.isArray(li)) {
li.forEach(function (each) { return _this._list.push(each); });
// this.listChangeEvent.next(this._list);
return Promise.resolve(li);
}
else {
this._list.push(li);
// this.listChangeEvent.next(this._list);
return Promise.resolve(li);
}
};
/**
* @return {?}
*/
InfiniteScrollListService.prototype.empty = /**
* @return {?}
*/
function () {
this._list.splice(0, this._list.length);
};
/**
* @param {?} key
* @return {?}
*/
InfiniteScrollListService.prototype.getMaxId = /**
* @param {?} key
* @return {?}
*/
function (key) {
var /** @type {?} */ item = lodash.maxBy(this._list, key);
return item ? item[key] : undefined;
};
/**
* @param {?} key
* @return {?}
*/
InfiniteScrollListService.prototype.getMinId = /**
* @param {?} key
* @return {?}
*/
function (key) {
var /** @type {?} */ item = lodash.minBy(this._list, key);
return item ? item[key] : undefined;
};
/**
* @param {?} condition
* @return {?}
*/
InfiniteScrollListService.prototype.find = /**
* @param {?} condition
* @return {?}
*/
function (condition) {
return lodash.find(this.list, condition);
};
Object.defineProperty(InfiniteScrollListService.prototype, "size", {
get: /**
* @return {?}
*/ function () {
return this._list.length;
},
enumerable: true,
configurable: true
});
InfiniteScrollListService.decorators = [
{ type: core.Injectable },
];
/** @nocollapse */
InfiniteScrollListService.ctorParameters = function () { return []; };
return InfiniteScrollListService;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
exports.InfiniteScrollListConfigDefault = InfiniteScrollListConfigDefault;
exports.INFINITE_SCROLL_LIST_CONFIG_TOKEN = INFINITE_SCROLL_LIST_CONFIG_TOKEN;
exports.InfiniteScrollListModule = InfiniteScrollListModule;
exports.InfiniteScrollListService = InfiniteScrollListService;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29sYmVsbGUtY29tbW9uLXNlcnZpY2VzLWluZmluaXRlLXNjcm9sbC1saXN0LnVtZC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vQHNjaG9vbGJlbGxlL2NvbW1vbi9zZXJ2aWNlcy9pbmZpbml0ZS1zY3JvbGwtbGlzdC9pbmZpbml0ZS1zY3JvbGwtbGlzdC5jb25maWcudHMiLCJuZzovL0BzY2hvb2xiZWxsZS9jb21tb24vc2VydmljZXMvaW5maW5pdGUtc2Nyb2xsLWxpc3QvaW5maW5pdGUtc2Nyb2xsLWxpc3QubW9kdWxlLnRzIiwibmc6Ly9Ac2Nob29sYmVsbGUvY29tbW9uL3NlcnZpY2VzL2luZmluaXRlLXNjcm9sbC1saXN0L2luZmluaXRlLXNjcm9sbC1saXN0LnNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBJbmZpbml0ZVNjcm9sbExpc3RDb25maWdJbnRlcmZhY2Uge1xuICBkZWJvdW5jZTogbnVtYmVyO1xuICBtYXhfc2l6ZV9wZXJfcXVlcnk6IG51bWJlcjtcbn1cbmV4cG9ydCBjbGFzcyBJbmZpbml0ZVNjcm9sbExpc3RDb25maWdEZWZhdWx0XG4gIGltcGxlbWVudHMgSW5maW5pdGVTY3JvbGxMaXN0Q29uZmlnSW50ZXJmYWNlIHtcbiAgZGVib3VuY2UgPSA0MDA7XG4gIG1heF9zaXplX3Blcl9xdWVyeSA9IDEwO1xufVxuZXhwb3J0IGNvbnN0IElORklOSVRFX1NDUk9MTF9MSVNUX0NPTkZJR19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxcbiAgSW5maW5pdGVTY3JvbGxMaXN0Q29uZmlnSW50ZXJmYWNlXG4+KCdJbmZpbml0ZVNjcm9sbExpc3RDb25maWdJbnRlcmZhY2UnKTtcbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJTkZJTklURV9TQ1JPTExfTElTVF9DT05GSUdfVE9LRU4sXG4gIEluZmluaXRlU2Nyb2xsTGlzdENvbmZpZ0RlZmF1bHQsXG4gIEluZmluaXRlU2Nyb2xsTGlzdENvbmZpZ0ludGVyZmFjZVxufSBmcm9tICcuL2luZmluaXRlLXNjcm9sbC1saXN0LmNvbmZpZyc7XG5cbkBOZ01vZHVsZSh7fSlcbmV4cG9ydCBjbGFzcyBJbmZpbml0ZVNjcm9sbExpc3RNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChvcHRpb25zOiBQYXJ0aWFsPEluZmluaXRlU2Nyb2xsTGlzdENvbmZpZ0ludGVyZmFjZT4gPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogSW5maW5pdGVTY3JvbGxMaXN0TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICBwcm92aWRlcjpJTkZJTklURV9TQ1JPTExfTElTVF9DT05GSUdfVE9LRU4sXG4gICAgICAgIC8vICAgdXNlOk9iamVjdC5hc3NpZ24oe30sIG5ldyBJbmZpbml0ZVNjcm9sbExpc3RDb25maWdEZWZhdWx0KCksIG9wdGlvbnMpLFxuICAgICAgICAvLyB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuLy8gaW1wb3J0IHsgSU5GSU5JVEVfU0NST0xMX0xJU1RfQ09ORklHX1RPS0VOLCBJbmZpbml0ZVNjcm9sbExpc3RDb25maWdEZWZhdWx0IH0gZnJvbSAnLi9pbmZpbml0ZS1zY3JvbGwtbGlzdC5jb25maWcnO1xuaW1wb3J0IHsgIEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluZCwgbWF4QnksIG1pbkJ5IH0gZnJvbSAnbG9kYXNoJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEluZmluaXRlU2Nyb2xsTGlzdFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBkaXNhYmxlZFxuICAgKiB5b3UgY2FuIG1hcmsgdGhlIGxpc3QgYXMgZGlzYWJsZSBmb3IgZXhhbXBsZSB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgdG8gZmV0Y2guXG4gICAqL1xuICBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSB0b2tlblxuICAgKiB3aGVuIHByb21pc2Ugb3Igb2JzZXJ2YWJsZSBhcmUgcHVzaGVkLCB0aGUgcmVzb2x2ZSBvciBlbWl0dGVkIHZhbHVlIG9mIHRoZW0gY2FuIGJlY29tZSB1bndhbnRlZC5cbiAgICogaW4gdGhpcyBjYXNlLCBzcGVjaWZ5IHRva2VuIHdoZW4gcHVzaGluZyB0aGVtIGFuZCBjaGFuZ2UgdGhlIHRva2VuIHRvIHNvbWV0aGluZyBlbHNlXG4gICAqIHNvIGluZmluaXRlIGxpc3Qgd2lsbCBkZWZ5IHRoZSByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgdG9rZW4gPSAnJztcbiAgcHVibGljIF9saXN0OiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGxpc3RDaGFuZ2VFdmVudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KHRoaXMuX2xpc3QpO1xuICBnZXQgbGlzdCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdENoYW5nZUV2ZW50LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIHB1YmxpYyBwdXNoKFxuICAgIGxpOiBQcm9taXNlPGFueVtdIHwgYW55PiB8IE9ic2VydmFibGU8YW55W10gfCBhbnk+IHwgYW55W10gfCBhbnksXG4gICAgdG9rZW4gPSAnJ1xuICApOiBQcm9taXNlPGFueVtdIHwgYW55PiB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIGlmIChsaSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIGxpLnRoZW4oKHJlc29sdmVkTGk6IGFueVtdIHwgYW55KSA9PiB7XG4gICAgICAgIGlmICh0b2tlbiAhPT0gdGhpcy50b2tlbikgcmV0dXJuO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZExpKSlcbiAgICAgICAgICByZXNvbHZlZExpLmZvckVhY2goZWFjaCA9PiB0aGlzLl9saXN0LnB1c2goZWFjaCkpO1xuICAgICAgICBlbHNlIHRoaXMuX2xpc3QucHVzaChyZXNvbHZlZExpKTtcbiAgICAgICAgLy8gdGhpcy5saXN0Q2hhbmdlRXZlbnQubmV4dCh0aGlzLl9saXN0KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGxpO1xuICAgIH0gZWxzZSBpZiAobGkgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICBsZXQgc3Vic2NyaXB0aW9uID0gbGkuc3Vic2NyaWJlKChlbWl0dGVkTGk6IGFueVtdIHwgYW55KSA9PiB7XG4gICAgICAgIGlmICh0b2tlbiAhPT0gdGhpcy50b2tlbikgcmV0dXJuO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbWl0dGVkTGkpKVxuICAgICAgICAgIGVtaXR0ZWRMaS5mb3JFYWNoKGVhY2ggPT4gdGhpcy5fbGlzdC5wdXNoKGVhY2gpKTtcbiAgICAgICAgZWxzZSB0aGlzLl9saXN0LnB1c2goZW1pdHRlZExpKTtcbiAgICAgICAgLy8gdGhpcy5saXN0Q2hhbmdlRXZlbnQubmV4dCh0aGlzLl9saXN0KTtcbiAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBsaS50b1Byb21pc2UoKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobGkpKSB7XG4gICAgICBsaS5mb3JFYWNoKGVhY2ggPT4gdGhpcy5fbGlzdC5wdXNoKGVhY2gpKTtcbiAgICAgIC8vIHRoaXMubGlzdENoYW5nZUV2ZW50Lm5leHQodGhpcy5fbGlzdCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGxpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdC5wdXNoKGxpKTtcbiAgICAgIC8vIHRoaXMubGlzdENoYW5nZUV2ZW50Lm5leHQodGhpcy5fbGlzdCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGxpKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGVtcHR5KCkge1xuICAgIHRoaXMuX2xpc3Quc3BsaWNlKDAsIHRoaXMuX2xpc3QubGVuZ3RoKTtcbiAgfVxuICBwdWJsaWMgZ2V0TWF4SWQoa2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgaXRlbSA9IG1heEJ5KHRoaXMuX2xpc3QsIGtleSk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtW2tleV0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcHVibGljIGdldE1pbklkKGtleTogc3RyaW5nKSB7XG4gICAgbGV0IGl0ZW0gPSBtaW5CeSh0aGlzLl9saXN0LCBrZXkpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbVtrZXldIDogdW5kZWZpbmVkO1xuICB9XG4gIHB1YmxpYyBmaW5kKGNvbmRpdGlvbjogYW55KSB7XG4gICAgcmV0dXJuIGZpbmQodGhpcy5saXN0LCBjb25kaXRpb24pO1xuICB9XG4gIGdldCBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLl9saXN0Lmxlbmd0aDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkluamVjdGlvblRva2VuIiwiTmdNb2R1bGUiLCJCZWhhdmlvclN1YmplY3QiLCJPYnNlcnZhYmxlIiwibWF4QnkiLCJtaW5CeSIsImZpbmQiLCJJbmplY3RhYmxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsUUFNQTs7NEJBRWEsR0FBRztzQ0FDTyxFQUFFOzs4Q0FUekI7UUFVQyxDQUFBO0FBSkQseUJBS2EsaUNBQWlDLEdBQUcsSUFBSUEsbUJBQWMsQ0FFakUsbUNBQW1DLENBQUM7Ozs7OztBQ2J0Qzs7Ozs7OztRQVNTLGdDQUFPOzs7O1lBQWQsVUFBZSxPQUF3RDtnQkFBeEQsd0JBQUE7b0JBQUEsWUFBd0Q7O2dCQUNyRSxPQUFPO29CQUNMLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFNBQVMsRUFBRSxFQUtWO2lCQUNGLENBQUM7YUFDSDs7b0JBWkZDLGFBQVEsU0FBQyxFQUFFOzt1Q0FQWjs7Ozs7OztBQ0FBO1FBT0U7Ozs7OzRCQU0yQixLQUFLOzs7Ozs7O3lCQU9qQixFQUFFO3lCQUNLLEVBQUU7bUNBQ0UsSUFBSUMsb0JBQWUsQ0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDO1NBZmhEO1FBZ0JoQixzQkFBSSwyQ0FBSTs7O2dCQUFSO2dCQUNFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUM1Qzs7O1dBQUE7Ozs7OztRQUNNLHdDQUFJOzs7OztzQkFDVCxFQUFnRSxFQUNoRSxLQUFVOztnQkFBVixzQkFBQTtvQkFBQSxVQUFVOztnQkFFVixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDbkIsSUFBSSxFQUFFLFlBQVksT0FBTyxFQUFFO29CQUN6QixFQUFFLENBQUMsSUFBSSxDQUFDLFVBQUMsVUFBdUI7d0JBQzlCLElBQUksS0FBSyxLQUFLLEtBQUksQ0FBQyxLQUFLOzRCQUFFLE9BQU87d0JBQ2pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7NEJBQzNCLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBQSxDQUFDLENBQUM7OzRCQUMvQyxLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzs7cUJBRWxDLENBQUMsQ0FBQztvQkFDSCxPQUFPLEVBQUUsQ0FBQztpQkFDWDtxQkFBTSxJQUFJLEVBQUUsWUFBWUMsZUFBVSxFQUFFO29CQUNuQyxxQkFBSSxjQUFZLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFDLFNBQXNCO3dCQUNyRCxJQUFJLEtBQUssS0FBSyxLQUFJLENBQUMsS0FBSzs0QkFBRSxPQUFPO3dCQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDOzRCQUMxQixTQUFTLENBQUMsT0FBTyxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUEsQ0FBQyxDQUFDOzs0QkFDOUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Ozt3QkFFaEMsY0FBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO3FCQUM1QixDQUFDLENBQUM7b0JBQ0gsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQ3ZCO3FCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDNUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLEtBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFBLENBQUMsQ0FBQzs7b0JBRTFDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDNUI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7O29CQUVwQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQzVCOzs7OztRQUVJLHlDQUFLOzs7O2dCQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7Ozs7UUFFbkMsNENBQVE7Ozs7c0JBQUMsR0FBVztnQkFDekIscUJBQUksSUFBSSxHQUFHQyxZQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQzs7Ozs7O1FBRS9CLDRDQUFROzs7O3NCQUFDLEdBQVc7Z0JBQ3pCLHFCQUFJLElBQUksR0FBR0MsWUFBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7Ozs7OztRQUUvQix3Q0FBSTs7OztzQkFBQyxTQUFjO2dCQUN4QixPQUFPQyxXQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzs7UUFFcEMsc0JBQUksMkNBQUk7OztnQkFBUjtnQkFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2FBQzFCOzs7V0FBQTs7b0JBdkVGQyxlQUFVOzs7O3dDQUxYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==