UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

383 lines (371 loc) 48.1 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('@angular/cdk/portal'), require('@angular/platform-browser'), require('rxjs/operators'), require('ng-zorro-antd/i18n'), require('@angular/common'), require('ng-zorro-antd/core')) : typeof define === 'function' && define.amd ? define('ng-zorro-antd/empty', ['exports', '@angular/core', 'rxjs', '@angular/cdk/portal', '@angular/platform-browser', 'rxjs/operators', 'ng-zorro-antd/i18n', '@angular/common', 'ng-zorro-antd/core'], factory) : (factory((global['ng-zorro-antd'] = global['ng-zorro-antd'] || {}, global['ng-zorro-antd'].empty = {}),global.ng.core,global.rxjs,global.ng.cdk.portal,global.ng.platformBrowser,global.rxjs.operators,global['ng-zorro-antd'].i18n,global.ng.common,global['ng-zorro-antd'].core)); }(this, (function (exports,i0,rxjs,portal,platformBrowser,operators,i18n,common,core) { 'use strict'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ // tslint:disable-next-line:no-any /** @type {?} */ var NZ_DEFAULT_EMPTY_CONTENT = new i0.InjectionToken('nz-empty-content'); /** @type {?} */ var NZ_EMPTY_COMPONENT_NAME = new i0.InjectionToken('nz-empty-component-name'); /** @type {?} */ var emptyImage = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTg0IiBoZWlnaHQ9IjE1MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI0IDMxLjY3KSI+PGVsbGlwc2UgZmlsbC1vcGFjaXR5PSIuOCIgZmlsbD0iI0Y1RjVGNyIgY3g9IjY3Ljc5NyIgY3k9IjEwNi44OSIgcng9IjY3Ljc5NyIgcnk9IjEyLjY2OCIvPjxwYXRoIGQ9Ik0xMjIuMDM0IDY5LjY3NEw5OC4xMDkgNDAuMjI5Yy0xLjE0OC0xLjM4Ni0yLjgyNi0yLjIyNS00LjU5My0yLjIyNWgtNTEuNDRjLTEuNzY2IDAtMy40NDQuODM5LTQuNTkyIDIuMjI1TDEzLjU2IDY5LjY3NHYxNS4zODNoMTA4LjQ3NVY2OS42NzR6IiBmaWxsPSIjQUVCOEMyIi8+PHBhdGggZD0iTTEwMS41MzcgODYuMjE0TDgwLjYzIDYxLjEwMmMtMS4wMDEtMS4yMDctMi41MDctMS44NjctNC4wNDgtMS44NjdIMzEuNzI0Yy0xLjU0IDAtMy4wNDcuNjYtNC4wNDggMS44NjdMNi43NjkgODYuMjE0djEzLjc5Mmg5NC43NjhWODYuMjE0eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudC0xKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuNTYpIi8+PHBhdGggZD0iTTMzLjgzIDBoNjcuOTMzYTQgNCAwIDAgMSA0IDR2OTMuMzQ0YTQgNCAwIDAgMS00IDRIMzMuODNhNCA0IDAgMCAxLTQtNFY0YTQgNCAwIDAgMSA0LTR6IiBmaWxsPSIjRjVGNUY3Ii8+PHBhdGggZD0iTTQyLjY3OCA5Ljk1M2g1MC4yMzdhMiAyIDAgMCAxIDIgMlYzNi45MWEyIDIgMCAwIDEtMiAySDQyLjY3OGEyIDIgMCAwIDEtMi0yVjExLjk1M2EyIDIgMCAwIDEgMi0yek00Mi45NCA0OS43NjdoNDkuNzEzYTIuMjYyIDIuMjYyIDAgMSAxIDAgNC41MjRINDIuOTRhMi4yNjIgMi4yNjIgMCAwIDEgMC00LjUyNHpNNDIuOTQgNjEuNTNoNDkuNzEzYTIuMjYyIDIuMjYyIDAgMSAxIDAgNC41MjVINDIuOTRhMi4yNjIgMi4yNjIgMCAwIDEgMC00LjUyNXpNMTIxLjgxMyAxMDUuMDMyYy0uNzc1IDMuMDcxLTMuNDk3IDUuMzYtNi43MzUgNS4zNkgyMC41MTVjLTMuMjM4IDAtNS45Ni0yLjI5LTYuNzM0LTUuMzZhNy4zMDkgNy4zMDkgMCAwIDEtLjIyMi0xLjc5VjY5LjY3NWgyNi4zMThjMi45MDcgMCA1LjI1IDIuNDQ4IDUuMjUgNS40MnYuMDRjMCAyLjk3MSAyLjM3IDUuMzcgNS4yNzcgNS4zN2gzNC43ODVjMi45MDcgMCA1LjI3Ny0yLjQyMSA1LjI3Ny01LjM5M1Y3NS4xYzAtMi45NzIgMi4zNDMtNS40MjYgNS4yNS01LjQyNmgyNi4zMTh2MzMuNTY5YzAgLjYxNy0uMDc3IDEuMjE2LS4yMjEgMS43ODl6IiBmaWxsPSIjRENFMEU2Ii8+PC9nPjxwYXRoIGQ9Ik0xNDkuMTIxIDMzLjI5MmwtNi44MyAyLjY1YTEgMSAwIDAgMS0xLjMxNy0xLjIzbDEuOTM3LTYuMjA3Yy0yLjU4OS0yLjk0NC00LjEwOS02LjUzNC00LjEwOS0xMC40MDhDMTM4LjgwMiA4LjEwMiAxNDguOTIgMCAxNjEuNDAyIDAgMTczLjg4MSAwIDE4NCA4LjEwMiAxODQgMTguMDk3YzAgOS45OTUtMTAuMTE4IDE4LjA5Ny0yMi41OTkgMTguMDk3LTQuNTI4IDAtOC43NDQtMS4wNjYtMTIuMjgtMi45MDJ6IiBmaWxsPSIjRENFMEU2Ii8+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTQ5LjY1IDE1LjM4MykiIGZpbGw9IiNGRkYiPjxlbGxpcHNlIGN4PSIyMC42NTQiIGN5PSIzLjE2NyIgcng9IjIuODQ5IiByeT0iMi44MTUiLz48cGF0aCBkPSJNNS42OTggNS42M0gwTDIuODk4LjcwNHpNOS4yNTkuNzA0aDQuOTg1VjUuNjNIOS4yNTl6Ii8+PC9nPjwvZz48L3N2Zz4='; /** @type {?} */ var simpleEmptyImage = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNjRweCIgaGVpZ2h0PSI0MXB4IiB2aWV3Qm94PSIwIDAgNjQgNDEiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDUyLjUgKDY3NDY5KSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KICAgIDxnIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00NzIuMDAwMDAwLCAtMTMzNS4wMDAwMDApIj4KICAgICAgICAgICAgPGcgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY0LjAwMDAwMCwgMTExNC4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxnICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0MC4wMDAwMDAsIDc4LjAwMDAwMCkiPgogICAgICAgICAgICAgICAgICAgIDxnICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNjguMDAwMDAwLCAxNDQuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxnID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbGxpcHNlICBmaWxsPSIjRjVGNUY1IiBjeD0iMzIiIGN5PSIzMyIgcng9IjMyIiByeT0iNyI+PC9lbGxpcHNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5LjAwMDAwMCwgMC4wMDAwMDApIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0iI0Q5RDlEOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTQ2LDEyLjc2MDU2MDQgTDM1Ljg1NDMwNDcsMS4yNTczOTYzMyBDMzUuMzY3NDQxNCwwLjQ3MzgyNjYwNSAzNC42NTU4Nzg5LDAgMzMuOTA2NzYxNywwIEwxMi4wOTMyMzgzLDAgQzExLjM0NDEyMTEsMCAxMC42MzI1NTg2LDAuNDczOTUwMjU1IDEwLjE0NTY5NTMsMS4yNTczOTYzMyBMMi42MTQ3OTcyN2UtMTIsMTIuNzYwNTYwNCBMMCwyMiBMNDYsMjIgTDQ2LDEyLjc2MDU2MDQgWiIgID48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTMyLjYxMzI4MTMsMTUuOTMxNSBDMzIuNjEzMjgxMywxNC4zMjU4NTExIDMzLjYwNjk1MzEsMTMuMDAwMjM0IDM0LjgzOTY5OTIsMTMgTDQ2LDEzIEw0NiwzMS4xMzcxMjc3IEM0NiwzMy4yNTg5NTc0IDQ0LjY3OTM4NjcsMzUgNDMuMDUwNDI5NywzNSBMMi45NDk1NzAzMSwzNSBDMS4zMjA1MjM0NCwzNSAwLDMzLjI1ODg0MDQgMCwzMS4xMzcxMjc3IEwwLDEzIEwxMS4xNjAzMDA4LDEzIEMxMi4zOTMwNDY5LDEzIDEzLjM4NjcxODgsMTQuMzIyODA4NSAxMy4zODY3MTg4LDE1LjkyODQ1NzQgTDEzLjM4NjcxODgsMTUuOTQ5NjM4MyBDMTMuMzg2NzE4OCwxNy41NTUyODcyIDE0LjM5MTcxMDksMTguODUxMTgwOSAxNS42MjQ0NTcsMTguODUxMTgwOSBMMzAuMzc1NTQzLDE4Ljg1MTE4MDkgQzMxLjYwODI4OTEsMTguODUxMTgwOSAzMi42MTMyODEzLDE3LjU0MzM1MTEgMzIuNjEzMjgxMywxNS45Mzc3MDIxIEwzMi42MTMyODEzLDE1LjkzMTUgWiIgIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @license * Copyright Alibaba.com All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ // tslint:disable-next-line:no-any /** * @param {?} content * @return {?} */ function getEmptyContentTypeError(content) { return TypeError("[NG-ZORRO]: useDefaultContent expect 'string', 'templateRef' or 'component' but get " + content); } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @template T */ var NzEmptyService = /** @class */ (function () { function NzEmptyService(defaultEmptyContent) { this.defaultEmptyContent = defaultEmptyContent; this.userDefaultContent$ = new rxjs.BehaviorSubject(undefined); if (this.defaultEmptyContent) { this.userDefaultContent$.next(this.defaultEmptyContent); } } /** * @param {?=} content * @return {?} */ NzEmptyService.prototype.setDefaultContent = /** * @param {?=} content * @return {?} */ function (content) { if (typeof content === 'string' || content === undefined || content === null || content instanceof i0.TemplateRef || content instanceof i0.Type) { this.userDefaultContent$.next(content); } else { throw getEmptyContentTypeError(content); } }; /** * @return {?} */ NzEmptyService.prototype.resetDefault = /** * @return {?} */ function () { this.userDefaultContent$.next(undefined); }; NzEmptyService.decorators = [ { type: i0.Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NzEmptyService.ctorParameters = function () { return [ { type: i0.Type, decorators: [{ type: i0.Inject, args: [NZ_DEFAULT_EMPTY_CONTENT,] }, { type: i0.Optional }] } ]; }; /** @nocollapse */ NzEmptyService.ngInjectableDef = i0.defineInjectable({ factory: function NzEmptyService_Factory() { return new NzEmptyService(i0.inject(NZ_DEFAULT_EMPTY_CONTENT, 8)); }, token: NzEmptyService, providedIn: "root" }); return NzEmptyService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NzEmbedEmptyComponent = /** @class */ (function () { function NzEmbedEmptyComponent(emptyService, sanitizer, viewContainerRef, cdr, injector) { this.emptyService = emptyService; this.sanitizer = sanitizer; this.viewContainerRef = viewContainerRef; this.cdr = cdr; this.injector = injector; this.contentType = 'string'; // tslint:disable-line:no-any this.defaultSvg = this.sanitizer.bypassSecurityTrustResourceUrl(simpleEmptyImage); this.size = ''; this.subs_ = new rxjs.Subscription(); } /** * @param {?} changes * @return {?} */ NzEmbedEmptyComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes.nzComponentName) { this.size = this.getEmptySize(changes.nzComponentName.currentValue); } if (changes.specificContent && !changes.specificContent.isFirstChange()) { this.content = changes.specificContent.currentValue; this.renderEmpty(); } }; /** * @return {?} */ NzEmbedEmptyComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; /** @type {?} */ var userContent_ = this.emptyService.userDefaultContent$.subscribe(( /** * @param {?} content * @return {?} */function (content) { _this.content = _this.specificContent || content; _this.renderEmpty(); })); this.subs_.add(userContent_); }; /** * @return {?} */ NzEmbedEmptyComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.subs_.unsubscribe(); }; /** * @private * @param {?} componentName * @return {?} */ NzEmbedEmptyComponent.prototype.getEmptySize = /** * @private * @param {?} componentName * @return {?} */ function (componentName) { switch (componentName) { case 'table': case 'list': return 'normal'; case 'select': case 'tree-select': case 'cascader': case 'transfer': return 'small'; default: return ''; } }; /** * @private * @return {?} */ NzEmbedEmptyComponent.prototype.renderEmpty = /** * @private * @return {?} */ function () { /** @type {?} */ var content = this.content; if (typeof content === 'string') { this.contentType = 'string'; } else if (content instanceof i0.TemplateRef) { /** @type {?} */ var context = ( /** @type {?} */({ $implicit: this.nzComponentName })); this.contentType = 'template'; this.contentPortal = new portal.TemplatePortal(content, this.viewContainerRef, context); } else if (content instanceof i0.Type) { /** @type {?} */ var context = new WeakMap([[NZ_EMPTY_COMPONENT_NAME, this.nzComponentName]]); /** @type {?} */ var injector = new portal.PortalInjector(this.injector, context); this.contentType = 'component'; this.contentPortal = new portal.ComponentPortal(content, this.viewContainerRef, injector); } else { this.contentType = 'string'; this.contentPortal = undefined; } this.cdr.markForCheck(); }; NzEmbedEmptyComponent.decorators = [ { type: i0.Component, args: [{ changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, selector: 'nz-embed-empty', exportAs: 'nzEmbedEmpty', template: "<ng-container *ngIf=\"!content && specificContent !== null\" [ngSwitch]=\"size\">\n <nz-empty *ngSwitchCase=\"'normal'\" class=\"ant-empty-normal\" [nzNotFoundImage]=\"defaultSvg\"></nz-empty>\n <nz-empty *ngSwitchCase=\"'small'\" class=\"ant-empty-small\" [nzNotFoundImage]=\"defaultSvg\"></nz-empty>\n <nz-empty *ngSwitchDefault></nz-empty>\n</ng-container>\n<ng-container *ngIf=\"content\">\n <ng-template *ngIf=\"contentType !== 'string'\" [cdkPortalOutlet]=\"contentPortal\"></ng-template>\n <ng-container *ngIf=\"contentType === 'string'\">\n {{ content }}\n </ng-container>\n</ng-container>\n" }] } ]; /** @nocollapse */ NzEmbedEmptyComponent.ctorParameters = function () { return [ { type: NzEmptyService }, { type: platformBrowser.DomSanitizer }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: i0.Injector } ]; }; NzEmbedEmptyComponent.propDecorators = { nzComponentName: [{ type: i0.Input }], specificContent: [{ type: i0.Input }] }; return NzEmbedEmptyComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NzEmptyComponent = /** @class */ (function () { function NzEmptyComponent(sanitizer, i18n$$1, cdr) { this.sanitizer = sanitizer; this.i18n = i18n$$1; this.cdr = cdr; // NOTE: It would be very hack to use `ContentChild`, because Angular could // tell if user actually pass something to <ng-content>. // See: https://github.com/angular/angular/issues/12530. // I can use a directive but this would expose the name `footer`. // @ContentChild(TemplateRef) nzNotFoundFooter: TemplateRef<void>; this.defaultSvg = this.sanitizer.bypassSecurityTrustResourceUrl(emptyImage); this.isContentString = false; this.locale = {}; this.destroy$ = new rxjs.Subject(); } Object.defineProperty(NzEmptyComponent.prototype, "shouldRenderContent", { get: /** * @return {?} */ function () { /** @type {?} */ var content = this.nzNotFoundContent; return !!(content || typeof content === 'string'); }, enumerable: true, configurable: true }); /** * @param {?} changes * @return {?} */ NzEmptyComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { var nzNotFoundContent = changes.nzNotFoundContent; if (nzNotFoundContent) { this.isContentString = typeof nzNotFoundContent.currentValue === 'string'; } }; /** * @return {?} */ NzEmptyComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; this.i18n.localeChange.pipe(operators.takeUntil(this.destroy$)).subscribe(( /** * @return {?} */function () { _this.locale = _this.i18n.getLocaleData('Empty'); _this.cdr.markForCheck(); })); }; /** * @return {?} */ NzEmptyComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.destroy$.next(); this.destroy$.complete(); }; NzEmptyComponent.decorators = [ { type: i0.Component, args: [{ changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, selector: 'nz-empty', exportAs: 'nzEmpty', template: "<div class=\"ant-empty-image\">\n <ng-container *nzStringTemplateOutlet=\"nzNotFoundImage\">\n <img [src]=\"nzNotFoundImage || defaultSvg\" [alt]=\"isContentString ? nzNotFoundContent : 'empty'\">\n </ng-container>\n</div>\n<p class=\"ant-empty-description\">\n <ng-container *nzStringTemplateOutlet=\"nzNotFoundContent\">\n {{ shouldRenderContent ? nzNotFoundContent : locale['description'] }}\n </ng-container>\n</p>\n<div class=\"ant-empty-footer\" *ngIf=\"nzNotFoundFooter\">\n <ng-container *nzStringTemplateOutlet=\"nzNotFoundFooter\">\n {{ nzNotFoundFooter }}\n </ng-container>\n</div>\n", host: { class: 'ant-empty' }, styles: ['nz-empty { display: block; }'] }] } ]; /** @nocollapse */ NzEmptyComponent.ctorParameters = function () { return [ { type: platformBrowser.DomSanitizer }, { type: i18n.NzI18nService }, { type: i0.ChangeDetectorRef } ]; }; NzEmptyComponent.propDecorators = { nzNotFoundImage: [{ type: i0.Input }], nzNotFoundContent: [{ type: i0.Input }], nzNotFoundFooter: [{ type: i0.Input }] }; return NzEmptyComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NzEmptyModule = /** @class */ (function () { function NzEmptyModule() { } NzEmptyModule.decorators = [ { type: i0.NgModule, args: [{ imports: [common.CommonModule, portal.PortalModule, core.NzAddOnModule, i18n.NzI18nModule], declarations: [NzEmptyComponent, NzEmbedEmptyComponent], exports: [NzEmptyComponent, NzEmbedEmptyComponent] },] } ]; return NzEmptyModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ exports.NzEmbedEmptyComponent = NzEmbedEmptyComponent; exports.NzEmptyComponent = NzEmptyComponent; exports.NzEmptyModule = NzEmptyModule; exports.NzEmptyService = NzEmptyService; exports.NZ_DEFAULT_EMPTY_CONTENT = NZ_DEFAULT_EMPTY_CONTENT; exports.NZ_EMPTY_COMPONENT_NAME = NZ_EMPTY_COMPONENT_NAME; exports.emptyImage = emptyImage; exports.simpleEmptyImage = simpleEmptyImage; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctem9ycm8tYW50ZC1lbXB0eS51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL25nLXpvcnJvLWFudGQvZW1wdHkvbnotZW1wdHktY29uZmlnLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkL2VtcHR5L256LWVtcHR5LWVycm9yLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkL2VtcHR5L256LWVtcHR5LnNlcnZpY2UudHMiLCJuZzovL25nLXpvcnJvLWFudGQvZW1wdHkvbnotZW1iZWQtZW1wdHkuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkL2VtcHR5L256LWVtcHR5LmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC9lbXB0eS9uei1lbXB0eS5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEFsaWJhYmEuY29tIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IEluamVjdGlvblRva2VuLCBUZW1wbGF0ZVJlZiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBOekVtcHR5U2l6ZSA9ICdub3JtYWwnIHwgJ3NtYWxsJyB8ICcnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG5leHBvcnQgdHlwZSBOekVtcHR5Q3VzdG9tQ29udGVudCA9IFR5cGU8YW55PiB8IFRlbXBsYXRlUmVmPGFueT4gfCBzdHJpbmc7XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbmV4cG9ydCBjb25zdCBOWl9ERUZBVUxUX0VNUFRZX0NPTlRFTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48VHlwZTxhbnk+PignbnotZW1wdHktY29udGVudCcpO1xuXG5leHBvcnQgY29uc3QgTlpfRU1QVFlfQ09NUE9ORU5UX05BTUUgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignbnotZW1wdHktY29tcG9uZW50LW5hbWUnKTtcblxuZXhwb3J0IGNvbnN0IGVtcHR5SW1hZ2UgPVxuICAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRnMElpQm9aV2xuYUhROUlqRTFNaUlnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajQ4WnlCbWFXeHNQU0p1YjI1bElpQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlQanhuSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtESTBJRE14TGpZM0tTSStQR1ZzYkdsd2MyVWdabWxzYkMxdmNHRmphWFI1UFNJdU9DSWdabWxzYkQwaUkwWTFSalZHTnlJZ1kzZzlJalkzTGpjNU55SWdZM2s5SWpFd05pNDRPU0lnY25nOUlqWTNMamM1TnlJZ2NuazlJakV5TGpZMk9DSXZQanh3WVhSb0lHUTlJazB4TWpJdU1ETTBJRFk1TGpZM05FdzVPQzR4TURrZ05EQXVNakk1WXkweExqRTBPQzB4TGpNNE5pMHlMamd5TmkweUxqSXlOUzAwTGpVNU15MHlMakl5TldndE5URXVORFJqTFRFdU56WTJJREF0TXk0ME5EUXVPRE01TFRRdU5Ua3lJREl1TWpJMVRERXpMalUySURZNUxqWTNOSFl4TlM0ek9ETm9NVEE0TGpRM05WWTJPUzQyTnpSNklpQm1hV3hzUFNJalFVVkNPRU15SWk4K1BIQmhkR2dnWkQwaVRURXdNUzQxTXpjZ09EWXVNakUwVERnd0xqWXpJRFl4TGpFd01tTXRNUzR3TURFdE1TNHlNRGN0TWk0MU1EY3RNUzQ0TmpjdE5DNHdORGd0TVM0NE5qZElNekV1TnpJMFl5MHhMalUwSURBdE15NHdORGN1TmpZdE5DNHdORGdnTVM0NE5qZE1OaTQzTmprZ09EWXVNakUwZGpFekxqYzVNbWc1TkM0M05qaFdPRFl1TWpFMGVpSWdabWxzYkQwaWRYSnNLQ05zYVc1bFlYSkhjbUZrYVdWdWRDMHhLU0lnZEhKaGJuTm1iM0p0UFNKMGNtRnVjMnhoZEdVb01UTXVOVFlwSWk4K1BIQmhkR2dnWkQwaVRUTXpMamd6SURCb05qY3VPVE16WVRRZ05DQXdJREFnTVNBMElEUjJPVE11TXpRMFlUUWdOQ0F3SURBZ01TMDBJRFJJTXpNdU9ETmhOQ0EwSURBZ01DQXhMVFF0TkZZMFlUUWdOQ0F3SURBZ01TQTBMVFI2SWlCbWFXeHNQU0lqUmpWR05VWTNJaTgrUEhCaGRHZ2daRDBpVFRReUxqWTNPQ0E1TGprMU0yZzFNQzR5TXpkaE1pQXlJREFnTUNBeElESWdNbFl6Tmk0NU1XRXlJRElnTUNBd0lERXRNaUF5U0RReUxqWTNPR0V5SURJZ01DQXdJREV0TWkweVZqRXhMamsxTTJFeUlESWdNQ0F3SURFZ01pMHllazAwTWk0NU5DQTBPUzQzTmpkb05Ea3VOekV6WVRJdU1qWXlJREl1TWpZeUlEQWdNU0F4SURBZ05DNDFNalJJTkRJdU9UUmhNaTR5TmpJZ01pNHlOaklnTUNBd0lERWdNQzAwTGpVeU5IcE5OREl1T1RRZ05qRXVOVE5vTkRrdU56RXpZVEl1TWpZeUlESXVNall5SURBZ01TQXhJREFnTkM0MU1qVklOREl1T1RSaE1pNHlOaklnTWk0eU5qSWdNQ0F3SURFZ01DMDBMalV5TlhwTk1USXhMamd4TXlBeE1EVXVNRE15WXkwdU56YzFJRE11TURjeExUTXVORGszSURVdU16WXROaTQzTXpVZ05TNHpOa2d5TUM0MU1UVmpMVE11TWpNNElEQXROUzQ1TmkweUxqSTVMVFl1TnpNMExUVXVNelpoTnk0ek1Ea2dOeTR6TURrZ01DQXdJREV0TGpJeU1pMHhMamM1VmpZNUxqWTNOV2d5Tmk0ek1UaGpNaTQ1TURjZ01DQTFMakkxSURJdU5EUTRJRFV1TWpVZ05TNDBNbll1TURSak1DQXlMamszTVNBeUxqTTNJRFV1TXpjZ05TNHlOemNnTlM0ek4yZ3pOQzQzT0RWak1pNDVNRGNnTUNBMUxqSTNOeTB5TGpReU1TQTFMakkzTnkwMUxqTTVNMVkzTlM0eFl6QXRNaTQ1TnpJZ01pNHpORE10TlM0ME1qWWdOUzR5TlMwMUxqUXlObWd5Tmk0ek1UaDJNek11TlRZNVl6QWdMall4TnkwdU1EYzNJREV1TWpFMkxTNHlNakVnTVM0M09EbDZJaUJtYVd4c1BTSWpSRU5GTUVVMklpOCtQQzluUGp4d1lYUm9JR1E5SWsweE5Ea3VNVEl4SURNekxqSTVNbXd0Tmk0NE15QXlMalkxWVRFZ01TQXdJREFnTVMweExqTXhOeTB4TGpJemJERXVPVE0zTFRZdU1qQTNZeTB5TGpVNE9TMHlMamswTkMwMExqRXdPUzAyTGpVek5DMDBMakV3T1MweE1DNDBNRGhETVRNNExqZ3dNaUE0TGpFd01pQXhORGd1T1RJZ01DQXhOakV1TkRBeUlEQWdNVGN6TGpnNE1TQXdJREU0TkNBNExqRXdNaUF4T0RRZ01UZ3VNRGszWXpBZ09TNDVPVFV0TVRBdU1URTRJREU0TGpBNU55MHlNaTQxT1RrZ01UZ3VNRGszTFRRdU5USTRJREF0T0M0M05EUXRNUzR3TmpZdE1USXVNamd0TWk0NU1ESjZJaUJtYVd4c1BTSWpSRU5GTUVVMklpOCtQR2NnZEhKaGJuTm1iM0p0UFNKMGNtRnVjMnhoZEdVb01UUTVMalkxSURFMUxqTTRNeWtpSUdacGJHdzlJaU5HUmtZaVBqeGxiR3hwY0hObElHTjRQU0l5TUM0Mk5UUWlJR041UFNJekxqRTJOeUlnY25nOUlqSXVPRFE1SWlCeWVUMGlNaTQ0TVRVaUx6NDhjR0YwYUNCa1BTSk5OUzQyT1RnZ05TNDJNMGd3VERJdU9EazRMamN3TkhwTk9TNHlOVGt1TnpBMGFEUXVPVGcxVmpVdU5qTklPUzR5TlRsNklpOCtQQzluUGp3dlp6NDhMM04yWno0PSc7XG5cbmV4cG9ydCBjb25zdCBzaW1wbGVFbXB0eUltYWdlID1cbiAgJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVZWUkdMVGdpUHo0S1BITjJaeUIzYVdSMGFEMGlOalJ3ZUNJZ2FHVnBaMmgwUFNJME1YQjRJaUIyYVdWM1FtOTRQU0l3SURBZ05qUWdOREVpSUhabGNuTnBiMjQ5SWpFdU1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJK0NpQWdJQ0E4SVMwdElFZGxibVZ5WVhSdmNqb2dVMnRsZEdOb0lEVXlMalVnS0RZM05EWTVLU0F0SUdoMGRIQTZMeTkzZDNjdVltOW9aVzFwWVc1amIyUnBibWN1WTI5dEwzTnJaWFJqYUNBdExUNEtJQ0FnSUR4bklITjBjbTlyWlQwaWJtOXVaU0lnYzNSeWIydGxMWGRwWkhSb1BTSXhJaUJtYVd4c1BTSnViMjVsSWlCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaVBnb2dJQ0FnSUNBZ0lEeG5JSFJ5WVc1elptOXliVDBpZEhKaGJuTnNZWFJsS0MwME56SXVNREF3TURBd0xDQXRNVE16TlM0d01EQXdNREFwSWo0S0lDQWdJQ0FnSUNBZ0lDQWdQR2NnSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEWTBMakF3TURBd01Dd2dNVEV4TkM0d01EQXdNREFwSWo0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR4bklDQjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2cwTUM0d01EQXdNREFzSURjNExqQXdNREF3TUNraVBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHhuSUNCMGNtRnVjMlp2Y20wOUluUnlZVzV6YkdGMFpTZ3pOamd1TURBd01EQXdMQ0F4TkRRdU1EQXdNREF3S1NJK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR4bklENEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHhsYkd4cGNITmxJQ0JtYVd4c1BTSWpSalZHTlVZMUlpQmplRDBpTXpJaUlHTjVQU0l6TXlJZ2NuZzlJak15SWlCeWVUMGlOeUkrUEM5bGJHeHBjSE5sUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BHY2dJQ0IwY21GdWMyWnZjbTA5SW5SeVlXNXpiR0YwWlNnNUxqQXdNREF3TUN3Z01DNHdNREF3TURBcElpQm1hV3hzTFhKMWJHVTlJbTV2Ym5wbGNtOGlJSE4wY205clpUMGlJMFE1UkRsRU9TSStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BIQmhkR2dnWkQwaVRUUTJMREV5TGpjMk1EVTJNRFFnVERNMUxqZzFORE13TkRjc01TNHlOVGN6T1RZek15QkRNelV1TXpZM05EUXhOQ3d3TGpRM016Z3lOall3TlNBek5DNDJOVFU0TnpnNUxEQWdNek11T1RBMk56WXhOeXd3SUV3eE1pNHdPVE15TXpnekxEQWdRekV4TGpNME5ERXlNVEVzTUNBeE1DNDJNekkxTlRnMkxEQXVORGN6T1RVd01qVTFJREV3TGpFME5UWTVOVE1zTVM0eU5UY3pPVFl6TXlCTU1pNDJNVFEzT1RjeU4yVXRNVElzTVRJdU56WXdOVFl3TkNCTU1Dd3lNaUJNTkRZc01qSWdURFEyTERFeUxqYzJNRFUyTURRZ1dpSWdJRDQ4TDNCaGRHZytDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BIQmhkR2dnWkQwaVRUTXlMall4TXpJNE1UTXNNVFV1T1RNeE5TQkRNekl1TmpFek1qZ3hNeXd4TkM0ek1qVTROVEV4SURNekxqWXdOamsxTXpFc01UTXVNREF3TWpNMElETTBMamd6T1RZNU9USXNNVE1nVERRMkxERXpJRXcwTml3ek1TNHhNemN4TWpjM0lFTTBOaXd6TXk0eU5UZzVOVGMwSURRMExqWTNPVE00Tmpjc016VWdORE11TURVd05ESTVOeXd6TlNCTU1pNDVORGsxTnpBek1Td3pOU0JETVM0ek1qQTFNak0wTkN3ek5TQXdMRE16TGpJMU9EZzBNRFFnTUN3ek1TNHhNemN4TWpjM0lFd3dMREV6SUV3eE1TNHhOakF6TURBNExERXpJRU14TWk0ek9UTXdORFk1TERFeklERXpMak00TmpjeE9EZ3NNVFF1TXpJeU9EQTROU0F4TXk0ek9EWTNNVGc0TERFMUxqa3lPRFExTnpRZ1RERXpMak00TmpjeE9EZ3NNVFV1T1RRNU5qTTRNeUJETVRNdU16ZzJOekU0T0N3eE55NDFOVFV5T0RjeUlERTBMak01TVRjeE1Ea3NNVGd1T0RVeE1UZ3dPU0F4TlM0Mk1qUTBOVGNzTVRndU9EVXhNVGd3T1NCTU16QXVNemMxTlRRekxERTRMamcxTVRFNE1Ea2dRek14TGpZd09ESTRPVEVzTVRndU9EVXhNVGd3T1NBek1pNDJNVE15T0RFekxERTNMalUwTXpNMU1URWdNekl1TmpFek1qZ3hNeXd4TlM0NU16YzNNREl4SUV3ek1pNDJNVE15T0RFekxERTFMamt6TVRVZ1dpSWdJR1pwYkd3OUlpTkdRVVpCUmtFaVBqd3ZjR0YwYUQ0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZaejRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQQzluUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZaejRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHd2Wno0S0lDQWdJQ0FnSUNBZ0lDQWdQQzluUGdvZ0lDQWdJQ0FnSUR3dlp6NEtJQ0FnSUR3dlp6NEtQQzl6ZG1jKyc7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgQWxpYmFiYS5jb20gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuZXhwb3J0IGZ1bmN0aW9uIGdldEVtcHR5Q29udGVudFR5cGVFcnJvcihjb250ZW50OiBhbnkpOiBFcnJvciB7XG4gIHJldHVybiBUeXBlRXJyb3IoYFtORy1aT1JST106IHVzZURlZmF1bHRDb250ZW50IGV4cGVjdCAnc3RyaW5nJywgJ3RlbXBsYXRlUmVmJyBvciAnY29tcG9uZW50JyBidXQgZ2V0ICR7Y29udGVudH1gKTtcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBBbGliYWJhLmNvbSBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsLCBUZW1wbGF0ZVJlZiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOekVtcHR5Q3VzdG9tQ29udGVudCwgTlpfREVGQVVMVF9FTVBUWV9DT05URU5UIH0gZnJvbSAnLi9uei1lbXB0eS1jb25maWcnO1xuaW1wb3J0IHsgZ2V0RW1wdHlDb250ZW50VHlwZUVycm9yIH0gZnJvbSAnLi9uei1lbXB0eS1lcnJvcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuZXhwb3J0IGNsYXNzIE56RW1wdHlTZXJ2aWNlPFQgPSBhbnk+IHtcbiAgdXNlckRlZmF1bHRDb250ZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TnpFbXB0eUN1c3RvbUNvbnRlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChOWl9ERUZBVUxUX0VNUFRZX0NPTlRFTlQpIEBPcHRpb25hbCgpIHByaXZhdGUgZGVmYXVsdEVtcHR5Q29udGVudDogVHlwZTxUPikge1xuICAgIGlmICh0aGlzLmRlZmF1bHRFbXB0eUNvbnRlbnQpIHtcbiAgICAgIHRoaXMudXNlckRlZmF1bHRDb250ZW50JC5uZXh0KHRoaXMuZGVmYXVsdEVtcHR5Q29udGVudCk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGVmYXVsdENvbnRlbnQoY29udGVudD86IE56RW1wdHlDdXN0b21Db250ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnIHx8XG4gICAgICBjb250ZW50ID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGNvbnRlbnQgPT09IG51bGwgfHxcbiAgICAgIGNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fFxuICAgICAgY29udGVudCBpbnN0YW5jZW9mIFR5cGVcbiAgICApIHtcbiAgICAgIHRoaXMudXNlckRlZmF1bHRDb250ZW50JC5uZXh0KGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBnZXRFbXB0eUNvbnRlbnRUeXBlRXJyb3IoY29udGVudCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXREZWZhdWx0KCk6IHZvaWQge1xuICAgIHRoaXMudXNlckRlZmF1bHRDb250ZW50JC5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBBbGliYWJhLmNvbSBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwsIFBvcnRhbCwgUG9ydGFsSW5qZWN0b3IsIFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBzaW1wbGVFbXB0eUltYWdlLCBOekVtcHR5Q3VzdG9tQ29udGVudCwgTnpFbXB0eVNpemUsIE5aX0VNUFRZX0NPTVBPTkVOVF9OQU1FIH0gZnJvbSAnLi9uei1lbXB0eS1jb25maWcnO1xuaW1wb3J0IHsgTnpFbXB0eVNlcnZpY2UgfSBmcm9tICcuL256LWVtcHR5LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHNlbGVjdG9yOiAnbnotZW1iZWQtZW1wdHknLFxuICBleHBvcnRBczogJ256RW1iZWRFbXB0eScsXG4gIHRlbXBsYXRlVXJsOiAnLi9uei1lbWJlZC1lbXB0eS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgTnpFbWJlZEVtcHR5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIG56Q29tcG9uZW50TmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBzcGVjaWZpY0NvbnRlbnQ6IE56RW1wdHlDdXN0b21Db250ZW50O1xuXG4gIGNvbnRlbnQ/OiBOekVtcHR5Q3VzdG9tQ29udGVudDtcbiAgY29udGVudFR5cGU6ICdjb21wb25lbnQnIHwgJ3RlbXBsYXRlJyB8ICdzdHJpbmcnID0gJ3N0cmluZyc7XG4gIGNvbnRlbnRQb3J0YWw/OiBQb3J0YWw8YW55PjsgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1hbnlcbiAgZGVmYXVsdFN2ZyA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChzaW1wbGVFbXB0eUltYWdlKTtcbiAgc2l6ZTogTnpFbXB0eVNpemUgPSAnJztcbiAgc3Vic18gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVtcHR5U2VydmljZTogTnpFbXB0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMubnpDb21wb25lbnROYW1lKSB7XG4gICAgICB0aGlzLnNpemUgPSB0aGlzLmdldEVtcHR5U2l6ZShjaGFuZ2VzLm56Q29tcG9uZW50TmFtZS5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnNwZWNpZmljQ29udGVudCAmJiAhY2hhbmdlcy5zcGVjaWZpY0NvbnRlbnQuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICB0aGlzLmNvbnRlbnQgPSBjaGFuZ2VzLnNwZWNpZmljQ29udGVudC5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLnJlbmRlckVtcHR5KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgdXNlckNvbnRlbnRfID0gdGhpcy5lbXB0eVNlcnZpY2UudXNlckRlZmF1bHRDb250ZW50JC5zdWJzY3JpYmUoY29udGVudCA9PiB7XG4gICAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLnNwZWNpZmljQ29udGVudCB8fCBjb250ZW50O1xuICAgICAgdGhpcy5yZW5kZXJFbXB0eSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zdWJzXy5hZGQodXNlckNvbnRlbnRfKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic18udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW1wdHlTaXplKGNvbXBvbmVudE5hbWU6IHN0cmluZyk6IE56RW1wdHlTaXplIHtcbiAgICBzd2l0Y2ggKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICByZXR1cm4gJ25vcm1hbCc7XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgY2FzZSAndHJlZS1zZWxlY3QnOlxuICAgICAgY2FzZSAnY2FzY2FkZXInOlxuICAgICAgY2FzZSAndHJhbnNmZXInOlxuICAgICAgICByZXR1cm4gJ3NtYWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckVtcHR5KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUeXBlID0gJ3N0cmluZyc7XG4gICAgfSBlbHNlIGlmIChjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB7ICRpbXBsaWNpdDogdGhpcy5uekNvbXBvbmVudE5hbWUgfSBhcyBhbnk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tYW55XG4gICAgICB0aGlzLmNvbnRlbnRUeXBlID0gJ3RlbXBsYXRlJztcbiAgICAgIHRoaXMuY29udGVudFBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbChjb250ZW50LCB0aGlzLnZpZXdDb250YWluZXJSZWYsIGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAoY29udGVudCBpbnN0YW5jZW9mIFR5cGUpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgV2Vha01hcChbW05aX0VNUFRZX0NPTVBPTkVOVF9OQU1FLCB0aGlzLm56Q29tcG9uZW50TmFtZV1dKTtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gbmV3IFBvcnRhbEluamVjdG9yKHRoaXMuaW5qZWN0b3IsIGNvbnRleHQpO1xuICAgICAgdGhpcy5jb250ZW50VHlwZSA9ICdjb21wb25lbnQnO1xuICAgICAgdGhpcy5jb250ZW50UG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChjb250ZW50LCB0aGlzLnZpZXdDb250YWluZXJSZWYsIGluamVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50VHlwZSA9ICdzdHJpbmcnO1xuICAgICAgdGhpcy5jb250ZW50UG9ydGFsID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgQWxpYmFiYS5jb20gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnpJMThuU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaTE4bic7XG5cbmltcG9ydCB7IGVtcHR5SW1hZ2UgfSBmcm9tICcuL256LWVtcHR5LWNvbmZpZyc7XG5cbkBDb21wb25lbnQoe1xuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc2VsZWN0b3I6ICduei1lbXB0eScsXG4gIGV4cG9ydEFzOiAnbnpFbXB0eScsXG4gIHRlbXBsYXRlVXJsOiAnLi9uei1lbXB0eS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogWyduei1lbXB0eSB7IGRpc3BsYXk6IGJsb2NrOyB9J10sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2FudC1lbXB0eSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBOekVtcHR5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIG56Tm90Rm91bmRJbWFnZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD47XG4gIEBJbnB1dCgpIG56Tm90Rm91bmRDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgQElucHV0KCkgbnpOb3RGb3VuZEZvb3Rlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgLy8gTk9URTogSXQgd291bGQgYmUgdmVyeSBoYWNrIHRvIHVzZSBgQ29udGVudENoaWxkYCwgYmVjYXVzZSBBbmd1bGFyIGNvdWxkXG4gIC8vIHRlbGwgaWYgdXNlciBhY3R1YWxseSBwYXNzIHNvbWV0aGluZyB0byA8bmctY29udGVudD4uXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTI1MzAuXG4gIC8vIEkgY2FuIHVzZSBhIGRpcmVjdGl2ZSBidXQgdGhpcyB3b3VsZCBleHBvc2UgdGhlIG5hbWUgYGZvb3RlcmAuXG4gIC8vIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIG56Tm90Rm91bmRGb290ZXI6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIGRlZmF1bHRTdmcgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoZW1wdHlJbWFnZSk7XG4gIGlzQ29udGVudFN0cmluZyA9IGZhbHNlO1xuICBsb2NhbGU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuICBnZXQgc2hvdWxkUmVuZGVyQ29udGVudCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5uek5vdEZvdW5kQ29udGVudDtcbiAgICByZXR1cm4gISEoY29udGVudCB8fCB0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplciwgcHJpdmF0ZSBpMThuOiBOekkxOG5TZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgbnpOb3RGb3VuZENvbnRlbnQgfSA9IGNoYW5nZXM7XG4gICAgaWYgKG56Tm90Rm91bmRDb250ZW50KSB7XG4gICAgICB0aGlzLmlzQ29udGVudFN0cmluZyA9IHR5cGVvZiBuek5vdEZvdW5kQ29udGVudC5jdXJyZW50VmFsdWUgPT09ICdzdHJpbmcnO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaTE4bi5sb2NhbGVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmxvY2FsZSA9IHRoaXMuaTE4bi5nZXRMb2NhbGVEYXRhKCdFbXB0eScpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBBbGliYWJhLmNvbSBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTnpBZGRPbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZSc7XG5cbmltcG9ydCB7IE56STE4bk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaTE4bic7XG5cbmltcG9ydCB7IE56RW1iZWRFbXB0eUNvbXBvbmVudCB9IGZyb20gJy4vbnotZW1iZWQtZW1wdHkuY29tcG9uZW50JztcbmltcG9ydCB7IE56RW1wdHlDb21wb25lbnQgfSBmcm9tICcuL256LWVtcHR5LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFBvcnRhbE1vZHVsZSwgTnpBZGRPbk1vZHVsZSwgTnpJMThuTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbTnpFbXB0eUNvbXBvbmVudCwgTnpFbWJlZEVtcHR5Q29tcG9uZW50XSxcbiAgZXhwb3J0czogW056RW1wdHlDb21wb25lbnQsIE56RW1iZWRFbXB0eUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTnpFbXB0eU1vZHVsZSB7fVxuIl0sIm5hbWVzIjpbIkluamVjdGlvblRva2VuIiwiQmVoYXZpb3JTdWJqZWN0IiwiVGVtcGxhdGVSZWYiLCJUeXBlIiwiSW5qZWN0YWJsZSIsIkluamVjdCIsIk9wdGlvbmFsIiwiU3Vic2NyaXB0aW9uIiwiVGVtcGxhdGVQb3J0YWwiLCJQb3J0YWxJbmplY3RvciIsIkNvbXBvbmVudFBvcnRhbCIsIkNvbXBvbmVudCIsIkNoYW5nZURldGVjdGlvblN0cmF0ZWd5IiwiVmlld0VuY2Fwc3VsYXRpb24iLCJEb21TYW5pdGl6ZXIiLCJWaWV3Q29udGFpbmVyUmVmIiwiQ2hhbmdlRGV0ZWN0b3JSZWYiLCJJbmplY3RvciIsIklucHV0IiwiaTE4biIsIlN1YmplY3QiLCJ0YWtlVW50aWwiLCJOekkxOG5TZXJ2aWNlIiwiTmdNb2R1bGUiLCJDb21tb25Nb2R1bGUiLCJQb3J0YWxNb2R1bGUiLCJOekFkZE9uTW9kdWxlIiwiTnpJMThuTW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFnQkEsUUFBYSx3QkFBd0IsR0FBRyxJQUFJQSxpQkFBYyxDQUFZLGtCQUFrQixDQUFDOztBQUV6RixRQUFhLHVCQUF1QixHQUFHLElBQUlBLGlCQUFjLENBQVMseUJBQXlCLENBQUM7O0FBRTVGLFFBQWEsVUFBVSxHQUNyQiw0ekVBQTR6RTs7QUFFOXpFLFFBQWEsZ0JBQWdCLEdBQzNCLGc0RUFBZzRFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNmbDRFLGFBQWdCLHdCQUF3QixDQUFDLE9BQVk7UUFDbkQsT0FBTyxTQUFTLENBQUMseUZBQXVGLE9BQVMsQ0FBQyxDQUFDO0lBQ3JILENBQUM7Ozs7Ozs7OztBQ0VEO1FBT0Usd0JBQWtFLG1CQUE0QjtZQUE1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQVM7WUFGOUYsd0JBQW1CLEdBQUcsSUFBSUMsb0JBQWUsQ0FBbUMsU0FBUyxDQUFDLENBQUM7WUFHckYsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDekQ7U0FDRjs7Ozs7UUFFRCwwQ0FBaUI7Ozs7WUFBakIsVUFBa0IsT0FBOEI7Z0JBQzlDLElBQ0UsT0FBTyxPQUFPLEtBQUssUUFBUTtvQkFDM0IsT0FBTyxLQUFLLFNBQVM7b0JBQ3JCLE9BQU8sS0FBSyxJQUFJO29CQUNoQixPQUFPLFlBQVlDLGNBQVc7b0JBQzlCLE9BQU8sWUFBWUMsT0FBSSxFQUN2QjtvQkFDQSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN4QztxQkFBTTtvQkFDTCxNQUFNLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN6QzthQUNGOzs7O1FBRUQscUNBQVk7OztZQUFaO2dCQUNFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDMUM7O29CQTdCRkMsYUFBVSxTQUFDO3dCQUNWLFVBQVUsRUFBRSxNQUFNO3FCQUNuQjs7Ozs7d0JBUG1ERCxPQUFJLHVCQVl6Q0UsU0FBTSxTQUFDLHdCQUF3QixjQUFHQyxXQUFROzs7OzZCQXBCekQ7S0FhQTs7Ozs7OztRQ21DRSwrQkFDUyxZQUE0QixFQUMzQixTQUF1QixFQUN2QixnQkFBa0MsRUFDbEMsR0FBc0IsRUFDdEIsUUFBa0I7WUFKbkIsaUJBQVksR0FBWixZQUFZLENBQWdCO1lBQzNCLGNBQVMsR0FBVCxTQUFTLENBQWM7WUFDdkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtZQUNsQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtZQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1lBWDVCLGdCQUFXLEdBQXdDLFFBQVEsQ0FBQzs7WUFFNUQsZUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM3RSxTQUFJLEdBQWdCLEVBQUUsQ0FBQztZQUN2QixVQUFLLEdBQUcsSUFBSUMsaUJBQVksRUFBRSxDQUFDO1NBUXZCOzs7OztRQUVKLDJDQUFXOzs7O1lBQVgsVUFBWSxPQUFzQjtnQkFDaEMsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFO29CQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDckU7Z0JBRUQsSUFBSSxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsRUFBRTtvQkFDdkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztvQkFDcEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2lCQUNwQjthQUNGOzs7O1FBRUQsd0NBQVE7OztZQUFSO2dCQUFBLGlCQU9DOztvQkFOTyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTOzs7bUJBQUMsVUFBQSxPQUFPO29CQUMxRSxLQUFJLENBQUMsT0FBTyxHQUFHLEtBQUksQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDO29CQUMvQyxLQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ3BCLEVBQUM7Z0JBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDOUI7Ozs7UUFFRCwyQ0FBVzs7O1lBQVg7Z0JBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUMxQjs7Ozs7O1FBRU8sNENBQVk7Ozs7O1lBQXBCLFVBQXFCLGFBQXFCO2dCQUN4QyxRQUFRLGFBQWE7b0JBQ25CLEtBQUssT0FBTyxDQUFDO29CQUNiLEtBQUssTUFBTTt3QkFDVCxPQUFPLFFBQVEsQ0FBQztvQkFDbEIsS0FBSyxRQUFRLENBQUM7b0JBQ2QsS0FBSyxhQUFhLENBQUM7b0JBQ25CLEtBQUssVUFBVSxDQUFDO29CQUNoQixLQUFLLFVBQVU7d0JBQ2IsT0FBTyxPQUFPLENBQUM7b0JBQ2pCO3dCQUNFLE9BQU8sRUFBRSxDQUFDO2lCQUNiO2FBQ0Y7Ozs7O1FBRU8sMkNBQVc7Ozs7WUFBbkI7O29CQUNRLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTztnQkFFNUIsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDO2lCQUM3QjtxQkFBTSxJQUFJLE9BQU8sWUFBWUwsY0FBVyxFQUFFOzt3QkFDbkMsT0FBTyxzQkFBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQU87b0JBQzFELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO29CQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUlNLHFCQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDbEY7cUJBQU0sSUFBSSxPQUFPLFlBQVlMLE9BQUksRUFBRTs7d0JBQzVCLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7O3dCQUN4RSxRQUFRLEdBQUcsSUFBSU0scUJBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztvQkFDM0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7b0JBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSUMsc0JBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUNwRjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7aUJBQ2hDO2dCQUVELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekI7O29CQXJGRkMsWUFBUyxTQUFDO3dCQUNULGVBQWUsRUFBRUMsMEJBQXVCLENBQUMsTUFBTTt3QkFDL0MsYUFBYSxFQUFFQyxvQkFBaUIsQ0FBQyxJQUFJO3dCQUNyQyxRQUFRLEVBQUUsZ0JBQWdCO3dCQUMxQixRQUFRLEVBQUUsY0FBYzt3QkFDeEIsNG1CQUE4QztxQkFDL0M7Ozs7O3dCQVJRLGNBQWM7d0JBSmRDLDRCQUFZO3dCQUhuQkMsbUJBQWdCO3dCQVZoQkMsb0JBQWlCO3dCQUVqQkMsV0FBUTs7OztzQ0F5QlBDLFFBQUs7c0NBQ0xBLFFBQUs7O1FBNkVSLDRCQUFDO0tBdEZEOzs7Ozs7O1FDK0JFLDBCQUFvQixTQUF1QixFQUFVQyxPQUFtQixFQUFVLEdBQXNCO1lBQXBGLGNBQVMsR0FBVCxTQUFTLENBQWM7WUFBVSxTQUFJLEdBQUpBLE9BQUksQ0FBZTtZQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1COzs7Ozs7WUFYeEcsZUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkUsb0JBQWUsR0FBRyxLQUFLLENBQUM7WUFDeEIsV0FBTSxHQUE4QixFQUFFLENBQUM7WUFPL0IsYUFBUSxHQUFHLElBQUlDLFlBQU8sRUFBUSxDQUFDO1NBRXFFO1FBUDVHLHNCQUFJLGlEQUFtQjs7O2dCQUF2Qjs7b0JBQ1EsT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUI7Z0JBQ3RDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQzthQUNuRDs7O1dBQUE7Ozs7O1FBTUQsc0NBQVc7Ozs7WUFBWCxVQUFZLE9BQXNCO2dCQUN4QixJQUFBLDZDQUFpQjtnQkFDekIsSUFBSSxpQkFBaUIsRUFBRTtvQkFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLGlCQUFpQixDQUFDLFlBQVksS0FBSyxRQUFRLENBQUM7aUJBQzNFO2FBQ0Y7Ozs7UUFFRCxtQ0FBUTs7O1lBQVI7Z0JBQUEsaUJBS0M7Z0JBSkMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDQyxtQkFBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVM7O21CQUFDO29CQUM5RCxLQUFJLENBQUMsTUFBTSxHQUFHLEtBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMvQyxLQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2lCQUN6QixFQUFDLENBQUM7YUFDSjs7OztRQUVELHNDQUFXOzs7WUFBWDtnQkFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzFCOztvQkFwREZWLFlBQVMsU0FBQzt3QkFDVCxlQUFlLEVBQUVDLDBCQUF1QixDQUFDLE1BQU07d0JBQy9DLGFBQWEsRUFBRUMsb0JBQWlCLENBQUMsSUFBSTt3QkFDckMsUUFBUSxFQUFFLFVBQVU7d0JBQ3BCLFFBQVEsRUFBRSxTQUFTO3dCQUNuQiw2bUJBQXdDO3dCQUV4QyxJQUFJLEVBQUU7NEJBQ0osS0FBSyxFQUFFLFdBQVc7eUJBQ25CO2lDQUhRLDhCQUE4QjtxQkFJeEM7Ozs7O3dCQWxCUUMsNEJBQVk7d0JBSVpRLGtCQUFhO3dCQWRwQk4sb0JBQWlCOzs7O3NDQThCaEJFLFFBQUs7d0NBQ0xBLFFBQUs7dUNBQ0xBLFFBQUs7O1FBdUNSLHVCQUFDO0tBckREOzs7Ozs7O1FDVkE7U0FLNkI7O29CQUw1QkssV0FBUSxTQUFDO3dCQUNSLE9BQU8sRUFBRSxDQUFDQyxtQkFBWSxFQUFFQyxtQkFBWSxFQUFFQyxrQkFBYSxFQUFFQyxpQkFBWSxDQUFDO3dCQUNsRSxZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQzt3QkFDdkQsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUM7cUJBQ25EOztRQUMyQixvQkFBQztLQUw3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=